bor*_*ula 3 scala apache-spark azure-data-lake databricks azure-databricks
问题陈述
我已将分区的 CSV 文件读入 Spark 数据帧。
为了利用 Delta Tables 的改进,我试图简单地将它作为 Delta 导出到 Azure Data Lake Storage Gen2 内的目录中。我在 Databricks 笔记本中使用以下代码:
%scala
df_nyc_taxi.write.partitionBy("year", "month").format("delta").save("/mnt/delta/")
Run Code Online (Sandbox Code Playgroud)
整个数据帧大约有 160 GB。
硬件规格
我正在使用具有 12 个内核和 42 GB RAM 的集群运行此代码。
但是看起来整个写入过程是由 Spark/Databricks 顺序处理的,例如非并行方式:
DAG 可视化如下所示:
总而言之,这将需要 1-2 个小时才能执行。
问题
要跟进@eliasah 评论,也许您可以尝试以下操作:
import org.apache.spark.sql.functions
df_nyc_taxi.repartition(col("year"), col("month"), lit(rand() * 200)).write.partitionBy("year", "month").format("delta").save("/mnt/delta/")
Run Code Online (Sandbox Code Playgroud)
@eliasah 的答案很可能只会为每个目录“/mnt/delta/year=XX/month=XX”创建一个文件,并且只有一名工作人员会将数据写入每个文件。额外的列将进一步对数据进行切片(在这种情况下,我将每个原始文件中的数据划分为 200 个较小的分区,您可以根据需要对其进行编辑),以便更多的工作人员可以同时写入。
PS:对不起,我还没有足够的代表发表评论:'D