Недавно я унаследовал проект 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")
Мне кажется, что это несколько хрупкий тест, потому что он основан на следующем предположении:
когда фрейм данных искры записывается в таблица, а затем эта таблица считывается в новый фрейм данных, новый фрейм данных будет иметь такое же количество разделов, что и исходный фрейм данных
Я думаю, этот неудачный тест доказывает, что это ложное предположение . Правильно ли я, что это ложное предположение?