我有一个PySpark数据框,我想添加一列,该列是根据其他列的多个值计算得出的。
例如,假设我有一个简单的数据框,其中包含年龄和人的名字,并且我想计算一些值,例如age*2 + len(name)
。我可以使用udf
还是.withColumn
来做到这一点吗?
from pyspark.sql import Row
l = [('Ankit',25),('Jalfaizy',22),('saurabh',20),('Bala',26)]
rdd = sc.parallelize(l)
people = rdd.map(lambda x: Row(name=x[0], age=int(x[1])))
schemaPeople = sqlContext.createDataFrame(people)
display(schemaPeople)
答案 0 :(得分:3)
使用withColumn
:
from pyspark.sql import functions as F
schemaPeople.withColumn(
"my_column",
F.col("age")*2 + F.length(F.col("name"))
).show()
答案 1 :(得分:0)
我找到了一种使用@udf
的方法:
@udf
def complex_op(age, name):
return age*2 + len(name)
schemaPeople.withColumn(
"my_column",
lit(complex_op(schemaPeople["age"], schemaPeople["name"]))
)