Как разделить по каждому значению столбца в pyspark? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть столбец "secteur" со значениями от 0 до 311. Я хочу сделать некоторые вычисления с помощью "secteur"

Я написал этот код:

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)

На самом деле,некоторые "secteur" пусты.

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

Кажется, хорошо, но на самом деле R содержит:

[[],
 [],
 [],
 [206],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [],
 [148],
 [],
 [167],
 [],
 [],
 [113],
 [],
 [100, 230],
 [],
 [],
...
 [316],
 [208, 28],
 [63],
 [],
 [],
 [268],
 [],
 [],
 [],
 [],
 []]

Я проверил, что список "secteur" одинаков в dfParSecteur и в R, и в "Secteur"находится только в одном разделе.Но в моем случае неэффективно иметь пустые разделы и разделы с двумя или тремя «секверами»: как этого избежать?

Конечно, код в myfunc - это не код цели, но его здесь нужно понять.как это работает.

...