Разбиение диапазона в Pyspark

#python #apache-spark #pyspark #partitioning

#python #apache-spark #pyspark #разбиение

Вопрос:

Допустим, у меня есть набор данных с 1 000 000 идентификаторов. Как бы я поступил с разделением по диапазону для 100 разделов. Я видел класс RangePartitioner в Scala, но, похоже, он недоступен в PySpark API.

У меня очень большой набор данных, и в настоящее время я разделяю его по уникальному идентификатору, но это создает слишком много разделов. Я хочу знать лучшие практики по разделению диапазона в PySpark

 df.write.partitionBy('unique_id').mode('overwrite').csv(file://test/)
 

Это помещает каждый идентификатор в отдельный раздел.

Кажется, я не могу найти никакой документации по разделению диапазона в PySpark.

Комментарии:

1. Вы ищете df.repartition(100, 'unique_id').write.mode('overwrite').csv('file:://test/') ? Документы

2. @pault Я проверю это, но то, что я ищу, это сказать, что идентификаторы находятся в последовательном порядке от идентификатора 0 до идентификатора 1000000. Я хочу, чтобы DF был разделен на разделы, где 0-10000 находятся в разделе 10000-etc в следующем и так далее.

3. Спасибо за документы, которые я искал repartitionByRange!

Ответ №1:

Для pyspark версии 2.4 и выше вы можете использовать pyspark.sql.DataFrame.repartitionByRange :

 df.repartitionByRange(100, 'unique_id').write.mode('overwrite').csv('file:://test/')
 

Комментарии:

1. Как выполнить разбиение диапазона на уровне pyspark rdd?

2. есть ли какая-либо разница между словами ‘repartitionByRange’ перед .write() ? т.е. df.repartitionByRange(n, col) . write() против df.write().repartitionByRange(n, col)