scala - Spark分区比没有它慢得多

标签 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 个额外的整数列。

最佳答案

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

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

关于scala - Spark分区比没有它慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898218/

相关文章:

scala - 如何从 Spark Streaming 开始从 Kafka 主题读取记录?

java - JPA如何推断属性的数据类型

java - Spark Java Map 函数被执行两次

json - 在spark-streaming中解析json

java - scala 宏注释的注释是什么?或者宏应用了多少次

python - 无法将 numpy 与 Spark 一起使用

scala - 在 IntelliJ Scala 工作表中使用 Apache Spark

python - Pyspark 和 Pandas 是否经过认证可以一起工作?

apache-spark - 外部表未从 Spark 流写入的 Parquet 文件更新

excel - Spark(Scala)解析时间戳格式为 ("dd-MMM-yy hh:mm:ss:SSSSSSSSS aa"的字段的问题)