我有一个简单的scala代码段,可以读取/写入总计10gb的json文件(从存储帐户装入目录)-->几乎所有时间都在写入json文件行中,耗时1.7小时。
群集设置:
azure databricks dbr 7.3 lts、spark 3.0.1、scala 2.12
11个工人+一个标准\u e4as \u v4类型的驱动程序(每个有32.0 gb内存,4核)
为什么写得太慢?
写入不是与读取跨分区/工作区并行吗?
如何加快写作或整个过程?
挂载目录代码:
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))
读/写json文件的代码:
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")
1条答案
按热度按时间yqlxgs2m1#
解决方法是使用更好的spark API,比如read-->spark.read.format(“json”).load(“path”)write-->res.write.format(“parquet”).save(“path”)并以parquet格式写入,因为它是压缩的,并且非常适合spark