如何按pyspark中列的每个值进行分区?

时间:2018-09-25 15:08:15

标签: python apache-spark pyspark partitioning

我有一个“ secteur”列,其值在0到311之间。 我想通过“ secteur”进行一些计算

我写了这段代码:

([\w<>:*, ]+?)

实际上,某些“派别”是空的。

NbSecteurs=312    
dfParSecteur=spark.createDataFrame(myRDD,dfSchema).repartition(NbSecteurs,"Secteur")
    def myfunc(iterator):
        Secteurs=[]
        for row in iterator:
            if row.Secteur not in Secteurs:
                Secteurs.append(row.Secteur)    
        yield(Secteurs)
    RDD_Virages=dfParSecteur.rdd.mapPartitions(myfunc)
    R=RDD_Virages.take(500)

似乎还可以,但实际上R包含:

dfParSecteur.select("Secteur").distinct().count()
>143
len(R)
>312
from itertools import chain
len(list(chain.from_iterable(R)))
>143

我检查了dfParSecteur和R中“ secteur”的列表是否相同,并且“ Secteur”仅在一个分区中。 但是在我的情况下,具有空的分区以及具有两个或三个“ secteurs”的分区效率低下:如何避免呢?

myfunc中的代码当然不是目标代码,但是可以在这里了解其运行方式。

0 个答案:

没有答案