从行中的多个值计算一个值

时间:2019-11-29 13:14:03

标签: python pyspark

我有一个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)

2 个答案:

答案 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"]))
    )
相关问题