#pyspark
#pyspark
Вопрос:
В pyspark, используя функцию withColumn, я хотел бы добавить к фрейму данных фиксированный столбец плюс переменное количество столбцов, в зависимости от размера списка. Я попытался сделать это, создав цикл перед функцией withColumn. Это решение не дает ожидаемого результата, поскольку в фрейм данных добавляется только последний столбец в цикле (делается постоянным). Я понимаю, что добавление цикла перед функцией Window дало бы ожидаемые результаты, однако многократное выполнение функции Window привело бы к остановке моего процесса — с точки зрения производительности -, поскольку мой набор данных содержит миллионы записей, а список содержит большое количество элементов.
...
products = ['a','b','c']
w1 = Window.orderBy("ID").partitionBy("ID")
data = data.withColumn(
"ID_changed_column",
(f.col("ID") != f.lead("ID").over(w1)).cast("int")
)
for product in products:
data = data.withColumn(
product,
("boo")
)
...
В этом примере мне нужно добавить в фрейм данных ‘data’ 4 столбца: ‘ID_changed_column’, ‘a’, ‘b’ и ‘c’. С помощью приведенного выше кода я получаю только столбец ‘c’ (последний в цикле). Есть ли какое-либо решение, использующее функцию Window только один раз?
Комментарии:
1. замените эту строку кода data = data.withColumn( product, lit(«boo»)) (в противном случае выдает ошибки), вы должны увидеть все столбцы.
2. @RangaVure, спасибо, но если я заменю эту строку столбцов, я не получу столбцы ‘a’ на ‘c’, добавленные в фрейм данных. Хорошей новостью является то, что после дополнительного тестирования приведенный выше код действительно работает. Проблема заключалась в извлечении данных из результирующего фрейма данных.