gpt4 book ai didi

apache-spark - Spark 输出文件 : Cut down no.

转载 作者:行者123 更新时间:2023-12-03 01:34:24 25 4
gpt4 key购买 nike

我编写了一个 Spark 程序来模仿现有 MapReduce 作业的功能。 MR作业每天大约需要50分钟,但是Spark作业只需要9分钟!那太棒了!

当我查看输出目录时,我注意到它创建了 1,020 个零件文件。 MR 作业仅使用 20 个化简器,因此它仅创建 20 个文件。我们需要减少输出文件的数量;否则我们的命名空间很快就会满的。

我正在尝试找出如何减少 Spark 下输出文件的数量。似乎有 1,020 个任务被触发,每个任务都会创建一个零件文件。它是否正确?我是否必须更改并行级别才能减少否。任务从而减少了数量。输出文件?如果是这样我该如何设置?恐怕砍不了。过多的任务会减慢这个过程 - 但我可以测试一下!

最佳答案

减少减少任务的数量肯定会减慢进程。但是,对于您的用例来说,它仍然应该比 Hadoop MapReduce 快得多。

在我看来,限制输出文件数量的最佳方法是使用coalesce(numPartitions) 转换。下面是一个例子:

JavaSparkContext ctx = new JavaSparkContext(/*your configuration*/);

JavaRDD<String> myData = ctx.textFile("path/to/my/file.txt");

//Consider we have 1020 partitions and thus 1020 map tasks
JavaRDD<String> mappedData = myData.map( your map function );

//Consider we need 20 output files
JavaRDD<String> newData = mappedData.coalesce(20)
newData.saveAsTextFile("output path");

在这个例子中,map函数将由1020个任务执行,这些任务不会以任何方式改变。但是,合并分区后,应该只有 20 个分区可供使用。在这种情况下,程序结束时将保存 20 个输出文件。

如前所述,请考虑到此方法将比具有 1020 个输出文件的速度慢。数据需要存储到几个分区(从1020到20)。

注意:请查看以下link上的重新分区命令也是。

关于apache-spark - Spark 输出文件 : Cut down no.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25967961/

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