spark coalesce与hdfs getmerge

lqfhib0f  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(363)

我正在spark开发一个程序。我需要将结果放在一个文件中,因此有两种方法可以合并结果:
凝聚(Spark):
myrdd.coalesce(1,false).saveastextfile(pathout);
之后将其合并到hdfs中:
hadoop fs-getmerge pathout localpath
哪一个最高效快捷?
有没有其他方法来合并hdfs中的文件(比如“getmerge”)将结果保存到hdfs,而不是将其保存到本地路径?

ldioqlga

ldioqlga1#

如果您确定数据适合内存,那么coalesce可能是最好的选择,但在另一种情况下,为了避免oom错误,我将使用getmerge,或者如果您使用fileutil类中的scala/java copymerge api函数。
检查spark用户邮件列表的这个线程。

uplii1fm

uplii1fm2#

如果您正在处理一个大型数据集(我假设您是这样),我建议让spark将每个分区写入hdfs中自己的“part”文件,然后使用 hadoop fs -getMerge 从hdfs目录中提取单个输出文件。
spark将数据分割成多个分区以提高效率,因此它可以在多个工作节点之间分配工作负载。如果合并到一小部分分区,则会降低其分配工作的能力,仅使用一个分区就将所有工作都放在一个节点上。在最好的情况下,这将是缓慢的,在最坏的情况下,它将用尽内存和崩溃的工作。

相关问题