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个唯一值id和name列值.在DataFrame有10个附加的整数列.
第一个代码片段会将每个分区的 parquet 文件写入文件系统(本地或 HDFS)。这意味着,如果您有 10 个不同的 ID 和 3000 个不同的名称,则此代码将创建 30000 个文件。我怀疑创建文件、写入镶木地板元数据等的开销相当大(除了洗牌之外)。
Spark 不是最好的数据库引擎,如果您的数据集适合内存,我建议使用关系数据库。它将变得更快、更容易使用。
| 归档时间: |
|
| 查看次数: |
4110 次 |
| 最近记录: |