【发布时间】:2018-10-31 13:03:29
【问题描述】:
我有一份 Spark 工作:
- 从 hdfs 读取数据
- 进行一些密集的转换没有洗牌和聚合(仅映射操作)
- 将结果写回 hdfs
假设我有 10GB 的原始数据(40 个块 = 40 个输入分区),这会产生 100MB 的处理数据。为了避免在 hdfs 中生成许多小文件,我使用“coalesce(1)”语句来编写带有结果的单个文件。 这样做我只运行了 1 个任务(因为“coalesce(1)”并且没有洗牌),它在一个线程中处理所有 10GB。
有没有办法在 40 个并行任务中进行实际的密集处理,并在写入磁盘之前减少分区数量并避免数据混洗?
我有一个可能可行的想法 - 在所有处理后将数据帧缓存在内存中(进行计数以强制 Spark 缓存数据),然后放入“coalesce(1)”并将数据帧写入磁盘
【问题讨论】:
标签: apache-spark