#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)