Создание тестовой таблицы Spark очень медленное - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь написать несколько тестовых примеров для нашей логики зажигания c, создав крошечные входные дельта-таблицы с известными значениями. Однако я замечаю, что создание одной дельта-таблицы одного элемента занимает очень много времени, около ~ 6 секунд на таблицу. Это быстро складывается, и для некоторых тестовых случаев, использующих несколько таблиц, требуется несколько минут!

Я принимаю, что тесты на искру также будут медленными, но аналогичные тесты с паркетом имеют скорость создания около 400 мс, что быть терпимым

Я выполняю эти тесты на Windows, что может способствовать моим проблемам, но другие форматы работают нормально и на порядок быстрее

Тестовый пример используется для генерации моего времени:

  "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 голосов
/ 16 марта 2020

Конфигурации 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"
)

Вы также можете применить тот же набор конфигураций для ускорения ваших тестов.

...