Функция Pyspark partitionBy не выполняет повторное разделение фрейма данных

#apache-spark #pyspark #pyspark-dataframes

#apache-spark #pyspark

Вопрос:

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

 df.rdd.repartition(100)
df.rdd.partitionBy(100,partitionFunc="HashPartitioner")
df.rdd.getNumPartitions() // Result - 519
  

Предполагается, что номер раздела равен 100, но вместо этого он выдает 519 (начальное значение). Я что-то упускаю (запускаю код в оболочке pyspark. )

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

1. df.rdd.repartition(100) и просто исчез. Это нигде не сохраняется, верно?

2. да! О, мне придется создать новый DF, поскольку фреймы данных неизменяемы, верно?

3. фреймы данных неизменяемы? ДА

Ответ №1:

Вам следует сохранить в вашем перераспределенном фрейме данных некоторое значение или новый фрейм данных и проверить его еще раз.

 df = spark.createDataFrame([(1, 'test')], ['id', 'value'])
print(df.rdd.getNumPartitions())
# 1

df = df.repartition(10)
print(df.rdd.getNumPartitions())
# 10
  

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

1. Спасибо! Кроме того, df.rdd.partitionBy(100,partitionFunc="HashPartitioner") это приведет к RDD, поэтому мне придется преобразовать его обратно в DataFrame, или есть другая функция, которая может выполнять задачу непосредственно в DataFrame. Поэтому мне не нужно преобразовывать его обратно в DataFrame.

2. Это зависит от вас.

3. Есть ли какой-либо лучший подход, или нам придется преобразовать его в RDD, а затем обратно в DataFrame, чтобы применить HashPartitioner.

4. Я знаю только более поздний вариант.