Apache spark 从spark worker节点写入databricks表

Apache spark 从spark worker节点写入databricks表,apache-spark,azure-databricks,Apache Spark,Azure Databricks,有人能告诉我是否可以直接从Spark中的工作节点写入databricks表吗?请提供代码片段。我正在对大约1亿条记录的大数据进行分区,因此,当我发出collect语句将数据返回到驱动程序节点时,由于内存问题,分区失败 通常,您总是从工作节点向DataRicks表写入数据。如你所见,无论如何都应该避免收取费用 为了避免OOM问题,您应该像大多数人一样,在工作节点上对记录进行重新分区,使其符合允许的分区大小限制(2GB或现在的4GB,使用较新的Spark版本),一切正常。例如: val repart

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

通常,您总是从工作节点向DataRicks表写入数据。如你所见,无论如何都应该避免收取费用

为了避免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.重新分区(col,N)
。还有
范围分区

最佳方法如下:

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

我们是否应该尝试编写重新分区的数据帧而不是初始数据帧?喜欢这个命令吗?-->repartitionedWikiDF.write.mode(“OVERWRITE”).parquet(targetPath)的确,晚上有点晚