我用:
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个额外的整数列
第一个代码片段将为每个分区写入一个parquet文件到文件系统(本地或HDFS)。这意味着如果您有10个不同的id和3000个不同的名称,这段代码将创建30000个文件。我怀疑创建文件、编写复合元数据等的开销相当大(除了洗牌)。
Spark不是最好的数据库引擎,如果您的数据集适合内存,我建议使用关系数据库。