小编Tom*_*cat的帖子

为什么在重新分区 Spark 数据帧时会得到这么多空分区?

我想在 3 列上对数据框“df1”进行分区。对于这 3 列,此数据框恰好有 990 个独特的组合:

In [17]: df1.createOrReplaceTempView("df1_view")

In [18]: spark.sql("select count(*) from (select distinct(col1,col2,col3) from df1_view) as t").show()
+--------+                                                                      
|count(1)|
+--------+
|     990|
+--------+
Run Code Online (Sandbox Code Playgroud)

为了优化这个数据帧的处理,我想对 df1 进行分区以获得 990 个分区,每个关键可能性一个:

In [19]: df1.rdd.getNumPartitions()
Out[19]: 24

In [20]: df2 = df1.repartition(990, "col1", "col2", "col3")

In [21]: df2.rdd.getNumPartitions()
Out[21]: 990
Run Code Online (Sandbox Code Playgroud)

我写了一个简单的方法来计算每个分区中的行数:

In [22]: def f(iterator):
    ...:     a = 0
    ...:     for partition in iterator:
    ...:         a = a + 1
    ...:     print(a)
    ...: 

In [23]: df2.foreachPartition(f)
Run Code Online (Sandbox Code Playgroud)

我注意到实际上我得到的是 628 个带有一个或多个键值的分区,以及 362 …

partitioning apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
2658
查看次数