Python 合并和重新分区不改变flatmap后的分区数

Python 合并和重新分区不改变flatmap后的分区数,python,pyspark,transformation,spark-submit,flatmap,Python,Pyspark,Transformation,Spark Submit,Flatmap,我有一个数据帧,我正在执行一些转换。我正在重新划分数据帧,以实现最大的并行性。我在一组转换后打印分区数以进行验证 但是,在我的flatmap转换之后,在设置PartiOtns的数量并打印分区的数量之后,我可以清楚地看到分区的数量没有改变 这是我的代码: source_df = spark.read.json("some_json.json", multiLine=True).repartition(24) pprint("number of partitions in source df is

我有一个数据帧,我正在执行一些转换。我正在重新划分数据帧,以实现最大的并行性。我在一组转换后打印分区数以进行验证

但是,在我的flatmap转换之后,在设置PartiOtns的数量并打印分区的数量之后,我可以清楚地看到分区的数量没有改变

这是我的代码:

source_df = spark.read.json("some_json.json", multiLine=True).repartition(24)
pprint("number of partitions in source df is {0}".format(source_df.rdd.getNumPartitions()))

transformed_rdd = source_df.select("data").rdd.flatMap(transform_data).repartition(24)
pprint(f"number of partitions in  transformed_rdd is {0}".format(transformed_rdd.getNumPartitions()))
number of partitions in source df is 24
number of partitions in  transformed_rdd is 0
这是我的输出:

source_df = spark.read.json("some_json.json", multiLine=True).repartition(24)
pprint("number of partitions in source df is {0}".format(source_df.rdd.getNumPartitions()))

transformed_rdd = source_df.select("data").rdd.flatMap(transform_data).repartition(24)
pprint(f"number of partitions in  transformed_rdd is {0}".format(transformed_rdd.getNumPartitions()))
number of partitions in source df is 24
number of partitions in  transformed_rdd is 0
如您所见,flatmap变为0后的分区数。我已尝试使用合并和重新分区

我为什么选择24个分区?

我在AWS EMR集群上运行这个spark作业。我有一个主节点和一个从节点。我的主节点是实例类型c5.2xlarge,从节点是m5a.xlarge。主节点包含8个VCPU,从节点包含4个

我已经计算了我的数据帧上的分区数,理想情况下是24个,这个计算来自AWS发布的

spark.default.parallelism = spark.executor.instances * spark.executors.cores * 2
我正在python 3.6上运行Spark 2.4


谢谢

您是否也可以共享transform_数据函数。这似乎是因为flatMap函数不会保留分区。信息技术如果您在这里发布完整的脚本,将会有所帮助。