调用dataframe.distinct()会导致将内容混洗到驱动程序以进行最终区分吗?

时间:2017-06-11 17:22:21

标签: scala apache-spark dataframe databricks

我有以下代码尝试读取一些jsons,区分它们并将输出写入单个json文件。我的问题是我应该在.collect()之后.distinct()还是在幕后发生?

val manyJsons = sqlContext.read.json(someJsonDirectory)
val distinctJsons = manyJsons.distinct()
distinctJsons.coalesce(1).write.json(jsonDirectoryWithOneFile)

1 个答案:

答案 0 :(得分:2)

如果您要写入磁盘中的文件,则不需要.collect()

.distinct()shuffle找到duplicatesremove duplicates的数据。

代码中的

.coalesce(1)正在将所有partitions移动到一个节点,然后再写入文件。这与.collect(相当。唯一的区别是,.collect()会将所有分区移至driver node,但.coalesce可能会或可能不会将所有分区移至driver node.coalesce(1)用于创建一个分区,以便输出文件只有一个。