什么样的火花操作并行处理?

Ins*_*nct 5 apache-spark spark-streaming rdd

我试图总结一下火花的整个概念.我想我对Spark平台有一个非常基本的了解.根据我的理解,Spark有RDD的概念,它是内存中"东西"的集合,因此处理速度更快.您可以使用map和flatmaps等方法转换 RDD.由于转换是惰性的,因此在最终RDD上调用操作之前不会对它们进行处理.我不清楚的是,当你做一个动作时,转换并行运行?你能指派工人同时做action吗?

例如,假设我有一个加载到RDD中的文本文件,

lines = //loadRDD
lines.map(SomeFunction())
lines.count()
Run Code Online (Sandbox Code Playgroud)

究竟发生了什么?SomeFunction()是否处理​​RDD的分区?什么是平行方面?

Ali*_*Lee 4

lines只是驻留在驱动程序中的 RDD 数据结构的名称,它表示行的分区列表。当需要时,它们partitions将在每个工作节点上进行管理。

当您的操作count被调用时,Spark 会向后执行任务来执行该操作,从而导致文件的一部分被读取 (a partition)、SomeFunction被序列化并通过网络发送给工作人员,并在每一行上执行。如果您有很多工作线程,则一次可以读取多个分区,并且SomeFunction可以将其映射到每个工作线程/核心的分区上。

每个工作进程将其已处理的分区的项目计数发送回驱动程序,驱动程序可以汇总所有分区的计数并返回总数。

注意:在您的示例中,SomeFunction 就项目计数而言是多余的。