Mik*_*kia 4 performance distributed-computing apache-spark
根据Spark文档,
Spark中的所有转换都是惰性的,因为它们不会立即计算出结果。相反,他们只记得应用于某些基本数据集(例如文件)的转换。仅当动作要求将结果返回给驱动程序时才计算转换。
我目前正在处理一个大型数据集,一旦处理该数据集,它会输出甚至更大数量的数据,这些数据需要存储在文本文件中,就像使用command一样saveAsTextFile(path)。
到目前为止,我一直在使用这种方法。但是,由于这是一个操作(如上所述),而不是转换,因此Spark需要将数据从每个分区发送到驱动程序节点,从而大大降低了保存过程。
我想知道saveAsTextFile()Spark上是否存在任何分布式文件保存方法(类似于),从而使每个执行程序能够自己存储自己的分区。
我认为您误解了将结果发送给驾驶员的含义。saveAsTextFile不会将数据发送回驱动程序。相反,一旦完成,它将保存的结果发送回驱动程序。即,saveAsTextFile 是分布式的。唯一不分发的情况是,只有一个分区,或者在调用saveAsTextFile之前已将RDD合并回一个分区。
该文档所指的是将saveAsTextFile(或任何其他“动作”)的结果发送回驱动程序。如果调用collect(),它将确实将数据发送到驱动程序,但是saveAsTextFile仅在完成后才将成功/失败消息发送回驱动程序。保存本身仍在群集中的许多节点上完成,这就是为什么您将获得许多文件的原因-每个分区一个。
IO总是很昂贵。但有时正是由于该摘录中描述的惰性行为,似乎saveAsTextFile甚至更加昂贵。本质上,当调用saveAsTextFile时,Spark可能会在保存之前执行许多或所有先前的操作。那就是懒惰。
如果您设置了Spark UI,则可以更好地了解保存数据的过程中发生的数据(如果尚未执行此操作)。
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |