Apache spark Spark 3:dataframe select列上的分区计数更改

Apache spark Spark 3:dataframe select列上的分区计数更改,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我注意到升级到spark 3时的行为有所不同,其中df.select上的NumPartitions正在更改,这导致我的zip操作在不匹配时失败。使用spark 2.4.4,工作正常。这不会发生在过滤器上,而只发生在选择列上 spark = SparkSession.builder.appName("local"). \ master("local[2]"). \ config("spark.executor.memory&

我注意到升级到spark 3时的行为有所不同,其中df.select上的NumPartitions正在更改,这导致我的zip操作在不匹配时失败。使用spark 2.4.4,工作正常。这不会发生在过滤器上,而只发生在选择列上

    spark = SparkSession.builder.appName("local"). \
    master("local[2]"). \
    config("spark.executor.memory", "2g"). \
    config("spark.driver.memory", "2g"). \
    config("spark.sql.shuffle.partitions",10). \
    config("spark.default.parallelism", 10). \
    getOrCreate()
使用Spark 2.4.4:

df = spark.table("tableA")
print(df.rdd.getNumPartitions()) #10
new_df = df.filter("id is not null")
print(new_df.rdd.getNumPartitions()) #10
new_2_df = df.select("id")
print(new_2_df.rdd.getNumPartitions()) #10
使用Spark 3.0.0:

df = spark.table("tableA")
print(df.rdd.getNumPartitions()) #10
new_df = df.filter("id is not null")
print(new_df.rdd.getNumPartitions()) #10
new_2_df = df.select("id")
print(new_2_df.rdd.getNumPartitions()) #1

请参阅最后一行,其中它从最初的10个分区更改为1个分区。有什么想法吗?

动态分区修剪是3.0中的新功能。
动态分区修剪是3.0中的新功能。

尝试使用下面的配置禁用DynamicPartitionPrunning,结果仍然相同spark=SparkSession.builder.appName(“pytest PypSpark本地测试”)。\硕士学位(“本地[5]”)配置(“spark.executor.memory”、“2g”)。\配置(“spark.driver.memory”、“2g”)。\配置(“spark.ui.showConsoleProgress”、“false”)。\配置(“spark.sql.shuffle.partitions”,10)。\配置(“spark.sql.optimizer.dynamicPartitionPruning.enabled”、“false”)。\配置(“spark.default.parallelism”,10)。\getOrCreate()尝试使用下面的配置禁用DynamicPartitionPrunning,结果仍然相同spark=SparkSession.builder.appName(“pytest PypSpark本地测试”)。\硕士学位(“本地[5]”)配置(“spark.executor.memory”、“2g”)。\配置(“spark.driver.memory”、“2g”)。\配置(“spark.ui.showConsoleProgress”、“false”)。\配置(“spark.sql.shuffle.partitions”,10)。\配置(“spark.sql.optimizer.dynamicPartitionPruning.enabled”、“false”)。\配置(“spark.default.parallelism”,10)。\getOrCreate()