我有以下代码尝试读取一些jsons,区分它们并将输出写入单个json文件。我的问题是我应该在.collect()
之后.distinct()
还是在幕后发生?
val manyJsons = sqlContext.read.json(someJsonDirectory)
val distinctJsons = manyJsons.distinct()
distinctJsons.coalesce(1).write.json(jsonDirectoryWithOneFile)
答案 0 :(得分:2)
如果您要写入磁盘中的文件,则不需要.collect()
.distinct()
会shuffle
找到duplicates
和remove duplicates
的数据。
.coalesce(1)
正在将所有partitions
移动到一个节点,然后再写入文件。这与.collect(
相当。唯一的区别是,.collect()
会将所有分区移至driver node
,但.coalesce
可能会或可能不会将所有分区移至driver node
。 .coalesce(1)
用于创建一个分区,以便输出文件只有一个。