从 spark 工作节点写入数据块 table

Write to databricks table from spark worker node

有人可以告诉我是否可以直接从 Spark 中的工作节点写入数据块 table 吗?请提供代码片段。我正在对大约 1 亿条记录的大数据进行分区,因此当我发出收集语句以将数据返回到驱动程序节点时,由于内存问题而失败。

通常,您总是从工作节点写入数据块 table。如您所见,应不惜一切代价避免收集 - 驱动程序 OOM。

为避免 OOM 问题,您应该像大多数人一样,对您的记录进行重新分区,使它们适合允许的分区大小限制 - 2GB 或现在 4GB,对于较新的 Spark 版本,在您的工作节点上,一切都很好。例如:

val repartitionedWikiDF = wikiDF.repartition(16) 
val targetPath = f"{workingDir}/wiki.parquet"
repartitionedwikiDF.write.mode("OVERWRITE").parquet(targetPath)
display(dbutils.fs.ls(targetPath))

您还可以执行df.repartition(col, N)。还有range partitioning.

最好的方法是 喜欢 这个 imo:

import org.apache.spark.sql.functions._
df.repartition(col("country"))
  .write.partitionBy("country")
  .parquet("repartitionedPartitionedBy.parquet")