如何在pyspark中创建新列?

时间:2017-10-25 11:00:04

标签: python python-2.7 apache-spark pyspark

在我的pyspark DataFrame中,我有两列price1price2。我想根据公式result创建一个新列((price1 - price2)/price1)。不过,我还要检查price1price2是否为空,price1不是0

如何使用这些条件正确创建新列?

现在我有了这个:

df = df.withColumn("result", df["price1"]-df["price2"]/df["price1"])

3 个答案:

答案 0 :(得分:1)

我认为你可以这样做:

df = df.withColumn("result", df["price1"]-df["price1"]/df["price2"]).fillna(0)

答案 1 :(得分:0)

如果你可以使用udf,

from pyspark.sql import functions as F

udf = F.udf(lambda x,y : 0 if x == 0 or not all((x,y)) else x-y/x)
df = df.withColumn("result", udf(df["price1"],df["price2"]))

答案 2 :(得分:0)

df = df.withColumn("result", 
when(df.col("price1").isNull OR df.col("price2").isNull OR df.col("price1")==0,0)
.otherwise(df.col("price1")-df.col("price2")/df.col("price1")))

这是使用scala来完成的。