我测试了写作:
df.write.partitionBy("id", "name")
.mode(SaveMode.Append)
.parquet(filePath)
但是,如果我省略分区:
df.write
.mode(SaveMode.Append)
.parquet(filePath)
它执行速度提高100倍(!)。
分区时,相同数量的数据在写入时需要花费100倍的时间才是正常的吗?
分别有10个和3000个唯一id
和name
列值。
DataFrame
有10个额外的整数列。
答案 0 :(得分:0)
第一个代码段会将每个分区的拼花文件写入文件系统(本地或HDFS)。这意味着如果您有10个不同的ID和3000个不同的名称,则此代码将创建30000个文件。我怀疑创建文件,编写镶木地板元数据等的开销非常大(除了改组)。
Spark不是最好的数据库引擎,如果你的数据集适合内存我建议使用关系数据库。使用它会更快更容易。