scala—是否可以假设sparkDataframe中的分区数在写入表之后仍然存在?

yjghlzjz  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(203)

我最近继承了一个使用spark的scala项目。ci管道上次运行时成功了,但那是六个多月前的事了,从那时起,我们的ci基础设施发生了变化,我现在正在将此ci管道更改为在新的基础设施上运行(基本上用于在本地kubernetes群集上运行,现在必须在基于云的kubernetes群集上运行)。
以前成功的测试现在失败了,唯一改变的是它运行的基础设施。问题中的问题代码归结为:

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
正在写入的Dataframe只包含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")

在我看来,这是一个有点脆弱的测试,因为它是基于以下假设:
当一个sparkDataframe被写入一个表,然后该表被读入一个新的Dataframe时,新的Dataframe将拥有与原始Dataframe相同数量的分区
我认为这个失败的测试证明了这是一个错误的假设。那是一个错误的假设,我说得对吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题