从spark worker节点写入databricks表

nwlqm0z1  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(388)

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

ergxz8rk

ergxz8rk1#

通常,您总是从工作节点写入databricks表。如你所见,应该不惜一切代价避免收取费用。
为了避免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 .
最佳方法如下:

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

相关问题