Spark partition比没有它慢得多

时间:2015-10-01 23:13:17

标签: scala apache-spark apache-spark-sql parquet

我测试了写作:

 df.write.partitionBy("id", "name")
    .mode(SaveMode.Append)
    .parquet(filePath)

但是,如果我省略分区:

 df.write
    .mode(SaveMode.Append)
    .parquet(filePath)

它执行速度提高100倍(!)。

分区时,相同数量的数据在写入时需要花费100倍的时间才是正常的吗?

分别有10个和3000个唯一idname列值。 DataFrame有10个额外的整数列。

1 个答案:

答案 0 :(得分:0)

第一个代码段会将每个分区的拼花文件写入文件系统(本地或HDFS)。这意味着如果您有10个不同的ID和3000个不同的名称,则此代码将创建30000个文件。我怀疑创建文件,编写镶木地板元数据等的开销非常大(除了改组)。

Spark不是最好的数据库引擎,如果你的数据集适合内存我建议使用关系数据库。使用它会更快更容易。