在pyspark中,如何使用带有withcolumn函数的循环将可变数量的列添加到数据框中?

时间:2019-03-28 11:51:41

标签: pyspark

在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函数的解决方案?

0 个答案:

没有答案