gpt4 book ai didi

performance - Spark分布式保存文件

转载 作者:行者123 更新时间:2023-12-05 01:00:17 26 4
gpt4 key购买 nike

根据Spark documentation ,

All transformations in Spark are lazy, in that they do not compute their results right away. Instead, they just remember the transformations applied to some base dataset (e.g. a file). The transformations are only computed when an action requires a result to be returned to the driver program.



我目前正在处理一个大型数据集,该数据集经过处理后会输出更大量的数据,这些数据需要存储在文本文件中,就像使用命令 saveAsTextFile(path) 所做的那样。 .

到目前为止,我一直在使用这种方法;然而,由于它是一个 Action (如上所述)而不是一个转换,Spark 需要将数据从每个分区发送到驱动程序节点,从而大大减慢了保存过程。

我想知道 Spark 上是否存在任何分布式文件保存方法(类似于 saveAsTextFile() ),使每个执行程序能够自行存储自己的分区。

最佳答案

我认为您误解了将结果发送给驱动程序的含义。 saveAsTextFile 不会将数据发送回驱动程序。相反,它会在完成后将保存结果发送回驱动程序。即,saveAsTextFile 是分布式的。唯一不分布式的情况是,如果您只有一个分区,或者您在调用 saveAsTextFile 之前已将 RDD 合并回单个分区。

该文档所指的是将 saveAsTextFile(或任何其他“操作”)的结果发送回驱动程序。如果您调用 collect() 那么它确实会将数据发送到驱动程序,但是 saveAsTextFile 仅在完成后将成功/失败的消息发送回驱动程序。保存本身仍然在集群中的许多节点上完成,这就是为什么您最终会得到许多文件 - 每个分区一个。

IO 总是很昂贵。但有时看起来似乎 saveAsTextFile 甚至更昂贵,正是因为该摘录中描述的惰性行为。本质上,当 saveAsTextFile 被调用时,Spark 可能会在保存的过程中执行许多或所有先前的操作。这就是懒惰的意思。

如果您设置了 Spark UI,它可以让您更好地了解数据在保存的过程中发生了什么(如果您还没有这样做)。

关于performance - Spark分布式保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com