Databricks 写入 Json 文件太慢
Databricks Write Json file is too slow
我有一个简单的 scala 片段到 read/write json 总共 10GB 的文件(从存储帐户安装目录)--> 几乎所有时间都在写入 [=1.7 小时=39=] 文件行。
集群设置:
- Azure Databricks DBR 7.3 LTS、spark 3.0.1、scala 2.12
- 11 名工作人员 + 一名 Standard_E4as_v4 类型的驱动程序(每个都有 32.0 GB 内存,4 核)
- 为什么写入速度太慢?
- 写是不是和阅读并行partitions/workers?
- 如何加快写作或整个过程?
挂载目录代码:
val containerName = "containerName"
val storageAccountName = "storageAccountName"
val sas = "sastoken"
val config = "fs.azure.sas." + containerName+ "." + storageAccountName + ".blob.core.windows.net"
dbutils.fs.mount(
source = "wasbs://containerName@storageAccountName.blob.core.windows.net/",
mountPoint = "/mnt/myfile",
extraConfigs = Map(config -> sas))
read/writejson 个文件的代码:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import spark.implicits._
val jsonDF = spark.read.json("/mnt/myfile")
jsonDF.write.json("/mnt/myfile/spark_output_test")
通过使用“我会说”更好的 spark api 来解决,比如
读取 --> spark.read.format("json").load("路径")
写入 --> res.write.format("parquet").save("路径)
并以 parquet 格式编写,因为它经过压缩并且针对 spark
进行了非常优化
我有一个简单的 scala 片段到 read/write json 总共 10GB 的文件(从存储帐户安装目录)--> 几乎所有时间都在写入 [=1.7 小时=39=] 文件行。
集群设置:
- Azure Databricks DBR 7.3 LTS、spark 3.0.1、scala 2.12
- 11 名工作人员 + 一名 Standard_E4as_v4 类型的驱动程序(每个都有 32.0 GB 内存,4 核)
- 为什么写入速度太慢?
- 写是不是和阅读并行partitions/workers?
- 如何加快写作或整个过程?
挂载目录代码:
val containerName = "containerName"
val storageAccountName = "storageAccountName"
val sas = "sastoken"
val config = "fs.azure.sas." + containerName+ "." + storageAccountName + ".blob.core.windows.net"
dbutils.fs.mount(
source = "wasbs://containerName@storageAccountName.blob.core.windows.net/",
mountPoint = "/mnt/myfile",
extraConfigs = Map(config -> sas))
read/writejson 个文件的代码:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import spark.implicits._
val jsonDF = spark.read.json("/mnt/myfile")
jsonDF.write.json("/mnt/myfile/spark_output_test")
通过使用“我会说”更好的 spark api 来解决,比如 读取 --> spark.read.format("json").load("路径") 写入 --> res.write.format("parquet").save("路径) 并以 parquet 格式编写,因为它经过压缩并且针对 spark
进行了非常优化