Scala 调用dataframe.distinct()是否会导致将内容洗牌到驱动程序以获得最终的区别?
我有下面的代码,它尝试读取一些json,区分它们,并将输出写入单个json文件。我的问题是,我应该在Scala 调用dataframe.distinct()是否会导致将内容洗牌到驱动程序以获得最终的区别?,scala,apache-spark,dataframe,databricks,Scala,Apache Spark,Dataframe,Databricks,我有下面的代码,它尝试读取一些json,区分它们,并将输出写入单个json文件。我的问题是,我应该在.distinct()之后.collect(),还是在幕后发生 val manyJsons = sqlContext.read.json(someJsonDirectory) val distinctJsons = manyJsons.distinct() distinctJsons.coalesce(1).write.json(jsonDirectoryWithOneFile) 如果要写入磁盘
.distinct()
之后.collect()
,还是在幕后发生
val manyJsons = sqlContext.read.json(someJsonDirectory)
val distinctJsons = manyJsons.distinct()
distinctJsons.coalesce(1).write.json(jsonDirectoryWithOneFile)
如果要写入磁盘中的文件,则不需要
.collect()
.distinct()
将洗牌
数据以查找重复项
和删除重复项
代码中的.coalesce(1)
在写入文件之前将所有分区
移动到一个节点。这相当于.collect(
)。唯一的区别是.collect()
会将所有分区移动到驱动程序节点
,但是.coalesce
可能会也可能不会将所有分区移动到驱动程序节点
.coalesce(1)
用于创建一个分区,以便输出文件仅为一个