Apache spark 创建测试火花增量表的速度非常慢

Apache spark 创建测试火花增量表的速度非常慢,apache-spark,delta-lake,Apache Spark,Delta Lake,我试图通过创建具有已知值的微小输入增量表,为我们的spark逻辑编写一些测试用例。然而,我注意到创建一个单项目增量表需要很长的时间,每个表大约需要6秒。这很快就会累积起来,一些使用多个表的测试用例需要几分钟才能运行 我承认火花测试也会比较慢,但类似的拼花地板测试的创建速度大约为400ms,这是可以接受的 我在Windows上运行这些测试,这可能会导致我的问题,但其他格式似乎运行得很好,速度快了几个数量级 我用来生成计时的测试用例是 “增量”应在中的“合理时间内创建”{ val spark:Spa

我试图通过创建具有已知值的微小输入增量表,为我们的spark逻辑编写一些测试用例。然而,我注意到创建一个单项目增量表需要很长的时间,每个表大约需要6秒。这很快就会累积起来,一些使用多个表的测试用例需要几分钟才能运行

我承认火花测试也会比较慢,但类似的拼花地板测试的创建速度大约为400ms,这是可以接受的

我在Windows上运行这些测试,这可能会导致我的问题,但其他格式似乎运行得很好,速度快了几个数量级

我用来生成计时的测试用例是

“增量”应在中的“合理时间内创建”{
val spark:SparkSession=SparkSession.builder
.master(“本地[1]”)
.getOrCreate()
导入spark.implicits_
//这需要约15秒,但大部分时间可归因于火花预热
val preload start=System.currentTimeMillis()
序号((“测试-1”、“我的测试”))
.toDF(“Id”、“来源”)
写
.格式(“增量”)
.save(s“c:/tmp/test-${java.util.UUID.randomuid()}”)
val preload=System.currentTimeMillis()
println(“预加载运行时间:”+(预加载结束-预加载开始)+“毫秒”)
//实际测试,为什么需要约6秒?!?
val testStart=System.currentTimeMillis()
序号((“测试-2”,“我的测试”))
.toDF(“Id”、“来源”)
写
.格式(“增量”)
.save(s“c:/tmp/test-${java.util.UUID.randomuid()}”)
val testEnd=System.currentTimeMillis()
println(“测试运行时间:”+(测试结束-测试开始)+“毫秒”)
}

是否有我缺少的配置值或其他加速增量表创建的方法?

Spark的默认配置不是为通常在单元测试中发生的小作业设计的。以下是单元测试中使用的Delta Lake:

javaOptions in Test ++= Seq(
  "-Dspark.ui.enabled=false",
  "-Dspark.ui.showConsoleProgress=false",
  "-Dspark.databricks.delta.snapshotPartitions=2",
  "-Dspark.sql.shuffle.partitions=5",
  "-Ddelta.log.cacheSize=3",
  "-Dspark.sql.sources.parallelPartitionDiscovery.parallelism=5",
  "-Xmx1024m"
)

您还可以应用同一组配置来加速测试。

推荐阅读:“以意外方式与Apache Spark并行化”(Spark Summit 2019)“并行作业提交和调度程序”部分>>但请记住,您需要N个线程才能在中运行N个任务parallel@SamsonScharfichter通过并行化我的测试设置,我可以获得一些收益,尽管这似乎是解决在增量表上执行操作似乎非常缓慢这一问题的一种方法