Spark partition比没有它慢得多

BAR*_*BAR 6 scala apache-spark parquet apache-spark-sql

我测试了写作:

 df.write.partitionBy("id", "name")
    .mode(SaveMode.Append)
    .parquet(filePath)
Run Code Online (Sandbox Code Playgroud)

但是,如果我省略分区:

 df.write
    .mode(SaveMode.Append)
    .parquet(filePath)
Run Code Online (Sandbox Code Playgroud)

它执行速度快100倍(!).

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

分别有10和3000个唯一值idname列值.在DataFrame有10个附加的整数列.

kos*_*tya 1

第一个代码片段会将每个分区的 parquet 文件写入文件系统(本地或 HDFS)。这意味着,如果您有 10 个不同的 ID 和 3000 个不同的名称,则此代码将创建 30000 个文件。我怀疑创建文件、写入镶木地板元数据等的开销相当大(除了洗牌之外)。

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