#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. Я знаю только более поздний вариант.