У меня есть столбец "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 - это не код цели, но его здесь нужно понять.как это работает.