Можно ли предположить, что количество разделов в фрейме данных Spark сохраняется после записи в таблицу? - PullRequest
1 голос
/ 26 мая 2020

Недавно я унаследовал проект Scala, в котором используется Spark. Конвейер CI в последний раз работал успешно, но это было более шести месяцев go, с тех пор наша инфраструктура CI изменилась, и теперь я меняю этот конвейер CI, чтобы он работал в новой инфраструктуре (в основном использовался для работы на- помещенный кластер кубернетов, теперь он должен работать в облачном кластере кубернетов).

Тест, который раньше был успешным, теперь не работает, и единственное, что изменилось, - это инфраструктура, в которой он работает. Код проблемы c в вопросах сводится к следующему:

val tableName = "data_table_3_spark_partitions"
spark.createDataFrame(someData).repartition(3).write.mode(SaveMode.Overwrite).saveAsTable(tableName)
val numberOfSparkPartitionsPriorToErase = spark.table(tableName).rdd.getNumPartitions
numberOfSparkPartitionsPriorToErase shouldBe 3

Теперь тест не проходит в этой 4-й строке с:

1 не равно 3

Записываемый фрейм данных содержит только 5 строк (в конце концов, это это модульный тест)

Код работает с локальной файловой системой, вот SparkConf:

new SparkConf().
      setMaster("local[*]").
      setAppName("test").
      set("spark.ui.enabled", "false").
      set("spark.app.id", appID).
      set("spark.driver.host", "localhost").
      set("spark.sql.sources.partitionOverwriteMode","dynamic")

Мне кажется, что это несколько хрупкий тест, потому что он основан на следующем предположении:

когда фрейм данных искры записывается в таблица, а затем эта таблица считывается в новый фрейм данных, новый фрейм данных будет иметь такое же количество разделов, что и исходный фрейм данных

Я думаю, этот неудачный тест доказывает, что это ложное предположение . Правильно ли я, что это ложное предположение?

...