创建 test spark增量表非常慢


0

我试图通过创建具有已知值的小输入delta表来为spark逻辑编写一些 test用例。但是我注意到创建一个单项目delta表需要很长的时间,每个表大约6秒。这很快就加起来了,一些使用多个表的 test用例需要几分钟才能运行!

我承认 spark test也会比较慢,但类似的实木复合地板 test的产生速度在400毫秒左右,这是可以接受的

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

我用来生成计时的 test用例是

  "delta" should "create in a reasonable time" in {

val spark: SparkSession = SparkSession.builder
  .master("local[1]")
  .getOrCreate()

import spark.implicits._

// This takes ~15seconds but most of that can be attributed to spark warming up
val preloadStart = System.currentTimeMillis()
Seq(("test-1", "my-test"))
  .toDF("Id", "Source")
  .write
  .format("delta")
  .save(s"c:/tmp/test-${java.util.UUID.randomUUID()}")
val preloadEnd = System.currentTimeMillis()
println("Preload Elapsed time: " + (preloadEnd - preloadStart) + "ms")

//actual test, why does this take ~6seconds?!?
val testStart = System.currentTimeMillis()
Seq(("test-2", "my-test"))
  .toDF("Id", "Source")
  .write
  .format("delta")
  .save(s"c:/tmp/test-${java.util.UUID.randomUUID()}")
val testEnd = System.currentTimeMillis()
println("Test Elapsed time: " + (testEnd - testStart) + "ms")

}

是否缺少一个配置值或以其他方式加快增量表的创建?

1 答案


0

Spark的默认配置不是为通常在单元 test中发生的小任务而设计的。以下是Delta Lake在单元 test中使用的配置:

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"
)

您还可以应用相同的配置集来加速 test。


我来回答

写文章

提问题

面试题