【发布时间】:2018-10-02 10:45:17
【问题描述】:
我正在尝试读取一个包含许多小拼花文件的文件夹:600 个文件,每个 500KB。然后repartition他们分成2个文件。
val df = spark.read.parquet("folder")
df.repartition(2).write.mode("overwrite").parquet("output_folder")
这非常慢,最多 10 分钟。从 spark UI 我可以看到 2 个执行程序正在处理 2 个任务。我给每个执行者 10GB 内存。
那么速度慢的原因是什么?是因为磁盘IO吗?在这种情况下如何提高性能。
编辑:我也尝试过使用coalesce,性能看起来并没有什么不同。
【问题讨论】:
-
请查看下方希望对您有所帮助!
-
每个执行器(spark.executor.cores)有多少个核心?如果只有一个,这可能是慢线的原因。
-
@pasha701 每个有 5 个,但我认为这并不重要,因为只有 2 个任务,所以只会使用 2 个内核。
-
600 个文件的输入,在阅读过程中可能会很慢,这就是内核很重要的原因。只是“df.count”工作得很快?
-
@pasha701
df.count很快。除了执行程序核心之外,我还可以尝试哪些其他设置?我认为 5 通常是该设置的最佳值。
标签: scala apache-spark