在pyspark中,我使用withColumn函数,根据列表的大小,向数据框添加一个固定的列以及可变数量的列。 我尝试通过在withColumn函数之前创建一个循环来做到这一点。由于仅将循环中的最后一列添加到数据框(使之持久),因此该解决方案无法提供预期的结果。我知道在Window函数之前添加循环会达到预期的效果,但是多次执行Window函数会杀死我的进程(从性能角度而言),因为我的数据集具有数百万条记录,并且列表中包含大量项。 / p>
...
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")
)
...
在此示例中,我需要在数据框“数据”中添加4列:“ ID_changed_column”,“ a”,“ b”和“ c”。使用上面的代码,我只会得到列“ c”(循环中的最后一个)。是否只有一次使用Window函数的解决方案?