【发布时间】:2020-05-14 01:33:51
【问题描述】:
问题陈述
我已将已分区的 CSV 文件读入 Spark Dataframe。
为了利用增量表的改进,我尝试将其简单地导出为 Azure Data Lake Storage Gen2 内的目录中的增量。我在 Databricks 笔记本中使用以下代码:
%scala
df_nyc_taxi.write.partitionBy("year", "month").format("delta").save("/mnt/delta/")
整个数据帧大约有 160 GB。
硬件规格
我正在使用具有 12 个内核和 42 GB RAM 的集群运行此代码。
但是看起来整个写入过程是由 Spark/Databricks 按顺序处理的,例如非平行时尚:
DAG 可视化如下所示:
总而言之,这似乎需要 1-2 小时才能执行。
问题
- 有没有办法让 Spark 真正并行写入不同的分区?
- 会不会是我尝试将增量表直接写入 Azure Data Lake Storage 的问题?
【问题讨论】:
-
试试
repartition(your_partition_columns).write.partitionBy("year", "month") -
感谢@eliasah 的输入。重新分区不需要一个整数而不是一个列列表吗?
-
当我尝试时:df_nyc_taxi.repartition("year", "month").write.partitionBy("year", "month").format("delta").save("/mnt /delta/") 我得到:错误:使用替代方法重载方法值重新分区:(partitionExprs: org.apache.spark.sql.Column*)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row ]
(numPartitions: Int,partitionExprs: org.apache.spark.sql.Column*)org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] 不能应用于 (String, String ) df_nyc_taxi.repartition("year", "month").write.partitionBy("year", "month").format("delta").save("/mnt/delta/") -
repartition可以将列列表作为重复参数。检查这个:stackoverflow.com/questions/52521067/… -
很好,会检查的。谢谢
标签: scala apache-spark databricks azure-data-lake azure-databricks