Pyspark: почему show () или count () объединенного фрейма данных Spark работают так медленно? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть два больших кадра данных искры.Я присоединился к ним одним общим столбцом:

df_joined = df1.join(df2.select("id",'label'), "id")

Я получил результат, но когда я хочу работать с df_joined, он слишком медленный.Как я знаю, нам нужно перераспределить df1 и df2, чтобы предотвратить большое количество разделов для df_joined.так что, даже, я изменил количество разделов,

df1r = df1.repartition(1)
df2r = df2.repartition(1)
df_joined = df1r.join(df2r.select("id",'label'), "id")

все еще не работает.любая идея?

1 Ответ

0 голосов
/ 24 сентября 2018

Spark запускает 1 параллельную задачу для каждого раздела RDD / DataFrame (до количества ядер в кластере).

Если в вашем кластере 20 ядер, у вас должно быть как минимум 20 разделов (на практике в 2-3 раза больше).С другой стороны, один раздел обычно не должен содержать более 128 МБ.

, поэтому вместо двух строк, которые перераспределяют ваш фрейм данных в 1 разделение:

df1r = df1.repartition(1)
df2r = df2.repartition(1)

Перераспределение ваших данныхна основе столбца 'id', соединяющего ключ, на n разделов.(n зависит от размера данных и количества ядер в кластере).

df1r = df1.repartition(n, "id")
df2r = df2.repartition(n, "id")
...