有没有办法用pyspark 2.1.0创建/填充列,其中列的名称是不同列的值?我尝试了以下方法
def createNewColumnsFromValues(dataFrame, colName, targetColName):
"""
Set value of column colName to targetColName's value
"""
cols = dataFrame.columns
#df = dataFrame.withColumn(f.col(colName), f.col(targetColName))
df = dataFrame.withColumn('x', f.col(targetColName))
return df
out注解行不起作用,当调用方法时我得到错误
TypeError: 'Column' object is not callable
而固定名称(作为字符串)是没有问题的。有没有办法让列的名称也来自另一个,而不仅仅是值?我还尝试使用UDF函数定义作为解决方案,同样没有成功的结果。
多谢帮忙!
编辑:
from pyspark.sql import functions as f
2条答案
按热度按时间yxyvkwin1#
我想出了一个解决方案,它可以很好地扩展少数(或不多)我需要列的不同值。这是必然的情况,否则列的数量会爆炸。
gcxthw6b2#
你可以尝试以下代码:
这里的技巧是执行
select("COLUMNNAME").collect()
以获得列中的值的列表。然后colName包含此列表,这是一个行列表,其中每一行都有一个元素。所以你可以直接遍历列表并访问位置0处的元素。在这种情况下,转换为string是必要的,以确保新列的列名是字符串。目标列用于每个单独列的值。因此结果如下所示: