- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在阅读 Apache Crunch documentation
我发现了以下句子:
Data is read in from the filesystem in a streaming fashion, so there is no requirement for the contents of the PCollection to fit in memory for it to be read into the client using materialization.
我想知道以流式方式从文件系统读取
是什么意思,如果有人能告诉我与其他读取数据的方式有什么区别,我将不胜感激。
我想说这个概念也适用于其他工具,例如 Spark。
最佳答案
假设您的文件系统上有一个英文文件,您需要将其翻译成德文。你基本上有两个选择。您可以将整个英文文件作为一大批加载到内存中,一次翻译整个批处理,然后将新的德文批处理写回文件系统。
或者您可以逐行进行。阅读英文第一行;翻译成德语并写入新文件;用英文阅读第二行并翻译成德文并附加到新文件中;等等。
后一种方法类似于 Apache Crunch 文档中描述的流方法。
PCollection
之于 Crunch 就像 RDD
之于 Spark —— 框架的基本分布式数据抽象,但 Crunch 在更高的抽象层次上运行。它试图为跨技术的数据管道提供一个很好的 API。
例如,您可能在 Hive 中拥有您的数据,您可以对其进行可靠的查询;这些查询的输出作为在 HBase 中存储数据的遗留 MapReduce 作业的输入;这些数据由 Spark 的 MLLib 机器学习库进行分析,结果最终发送给 Cassandra。 Crunch 试图通过 PCollection
抽象将所有这些连接在一起,但它的流式处理方法意味着您不必在下一个工作开始之前等待一个工作完成。与逐行文件翻译一样,您一次处理一点,然后将每一位移动到管道的每个阶段,而不是分批进行。
您说得对,流式处理的概念适用于像 Spark 这样的工具(最明显的是 Spark Streaming),但正如我所提到的,Spark 的工作抽象级别低于 Crunch。 Spark 作业可能只是 Crunch 管道的一部分。但流式传输确实是一种强大的范例。它是 Kappa Architecture 的基础由 Jay Kreps(前身为 LinkedIn,现为 Confluent,先驱 Apache Kafka )设计,作为基于批处理的 Lambda Architecture 的更简单但更强大的替代方案由 Nathan Marz(前身为 Twitter)设计。
最后,选择是在抽象级别(Crunch 高于 Spark)和一次操作一批还是逐位操作之间做出选择。
关于hadoop - read data as "streaming fashion"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647168/
我正在尝试实现具有以下签名的方法: public static Pair, Stream> flatten(Iterator, Stream>> iterator); 该方法的目标是将每种流类型展平
我有两个流从两个不同的 api 获取。 Stream get monthOutStream => monthOutController.stream; Stream get resultOutStre
Stream.of(int[])返回 Stream ,而 Stream.of(String[])返回 Stream . 为什么这两种方法的行为不同?两者都应该返回 Stream和 Stream或 St
我正在使用 rxdart在 dart 中处理流的包。我被困在处理一个特殊的问题上。 请看一下这个虚拟代码: final userId = BehaviorSubject(); Stream getSt
我到处都找遍了,还是没弄明白。我知道你可以用流建立两个关联: 用于支持数据存储的包装器意味着作为消费者和供应商之间的抽象层 数据随着时间的推移变得可用,而不是一次全部 SIMD 代表单指令,多数据;在
考虑下面的代码: List l=new ArrayList<>(); l.add(23);l.add(45);l.add(90); Stream str=l.stream
我有一个大型主干/requirejs 应用程序,我想迁移到 webpack,最新的“webpack”:“^4.27.1”,但我遇到了一个我无法解决的错误。 我一直在阅读 https://webpack
我正在使用 xmpp 开发聊天应用程序,根据我们的要求,我们有三台服务器 Apache Tomcat 7、ejabbered 2.1.11 和 mysql 5.5, to run xmppbot on
我知道如何使用 Java 库,并且我可以编写一些循环来执行我需要的操作,但问题更多,为什么 scala.collection.JavaConverters 中没有任何内容或scala.collecti
我正在尝试创建一个单一的衬里,它应该计算一个非常长的文本文件中的唯一单词。独特的词例如:márya fëdorovna scarlet-liveried,...所以基本上都是非英语词。 我的问题是我的
如果我有以下情况: StreamWriter MySW = null; try { Stream MyStream = new FileStream("asdf.txt"); MySW =
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
考虑两种测试方法parallel()和sequential(): @Test public void parallel() throws Exception { System.ou
我是 NodeJS 的新手,我基本上想做的是通过 HTTP 将 .pdf 上传到我的服务器。我正在使用 POST rquest 来处理 Content-Type multipart/form-data
哪个更好:MemoryStream.WriteTo(Stream destinationStream) 或 Stream.CopyTo(Stream destinationStream)?? 我正在谈
给定一个 Stream,我想创建一个新的 Stream,其中的元素在它们之间有时间延迟。 我尝试使用 tokio_core::reactor::Timeout 和 Stream 的 and_then
我是 Kafka Streams 和 Spring Cloud Stream 的新手,但在将集成相关代码移动到属性文件方面已经阅读了有关它的好东西,因此开发人员可以主要专注于事物的业务逻辑方面。 这里
源代码看起来非常相似:pump , pipe .为什么我要使用一个而不是另一个?一个只是另一个的更好版本吗? 最佳答案 Stream.pipe 现在显然是自 0.3.x 以来的首选方法,因此尽可能尝试
我正在寻找是否有更好的方法来解决我不得不使用这些签名的困境(注意:由于 Spock 测试,T[][] 是必需的,我提供 T[][] 作为数据提供商) 我的方法签名是: public T[][] cr
我是一名优秀的程序员,十分优秀!