Я использую Spark 2.3.0 с PySpark для объединения небольшого набора данных с большим набором данных.
Вот самый быстрый способ объединения, который я нашел, но он все еще занимает около 2 часов, поэтомуЯ хотел бы найти любую идею, чтобы сделать это быстрее.
Оба набора данных предварительно обрабатываются следующим образом:
Большой набор данныхимеет 50 разделов, в каждом из которых около 5 миллионов записей.
Небольшой набор данных также имеет 50 разделов, но может не совпадать с 50 разделами в большом наборе данных, и в общей сложности 10 тыс. записей.
distinct_months_in_small = xxxx
distinct_ids_in_small = xxxx
filtered_df_big = df_big.where(
(f.col('id').isin(distinct_ids_in_small)) & (f.col('month').isin(distinct_months_in_small))
)
result_df = filtered_df_big.alias('big').join(
f.broadcast(small_df.alias('small')),
(f.col('big.id') == f.col('small.id')) & (f.col('big.month') == f.col('small.month'))
).withColumn(
xxxx
)
result_df.write.save(xxxx)
spark-submit имеет такой параметр:
--num-executors 40 --executor-memory 16G --driver-memory 16G --executor-cores 4 --master yarn
Кстати, приведенная выше логика работает довольно хорошо, около 15 минут, еслиНебольшой набор данных содержит, например, 2 архива с 8 миллионами записей.
Может кто-нибудь помочь мне сделать это быстрее вУ него много архивов, но меньше записей? Большое спасибо!