Что происходит в Pyspark, когда вы группируете тот же столбец, что и в partitionBy? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть набор данных, который был разбит на столбец ID и записан на диск. Это приводит к тому, что каждый раздел получает свою собственную папку в файловой системе. Сейчас я читаю эти данные обратно и хотел бы вызвать groupBy('ID') с последующим вызовом функции pandas_udf. Мой вопрос: поскольку данные были разделены на ID, будет ли groupBy('ID') быстрее, чем если бы они не были разделены? Было бы лучше, например, читать по одному ID за один раз, используя структуру папок? Я беспокоюсь, что операция groupBy просматривает все записи, даже если они уже разбиты на разделы.

1 Ответ

0 голосов
/ 07 ноября 2019
  1. Вы разбили на ID и сохранили на диск
  2. Вы прочитали его еще раз и хотите сгруппировать и применить pandas udf

Очевидно, что groupby будет просматривать каждую запись, как и большинство функций. Но использование pandas_udf, которое groupby("ID") будет дорогостоящим, поскольку оно будет проходить через ненужные тасовки.

Вы можете оптимизировать производительность, используя groupby spark_partition_id(), поскольку вы уже разбиты на столбцы, по которым хотите группировать данные.

РЕДАКТИРОВАТЬ:

Если вы хотите имена файлов, вы можете попробовать:

from  pyspark.sql.functions import input_file_name

df.withColumn("filename", input_file_name())
...