根据列当前值更新pyspark中的列

时间:2017-01-01 11:24:03

标签: apache-spark pyspark apache-spark-sql pyspark-sql

让我们说给定一个DataFrame

+-----+-----+-----+
|    x|    y|    z|
+-----|-----+-----+
|    3|    5|    9|
|    2|    4|    6|
+-----+-----+-----+

我想将z列中的所有值乘以y列中z列等于6的值。

This帖子使用代码

显示了我的目标
from pyspark.sql import functions as F

df = df.withColumn('z',
    F.when(df['z']==6, df['z']*df['y']).
    otherwise(df['z']))

问题在于df['z']df['y']被识别为列对象并且投射它们不会起作用......

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

from pyspark.sql import functions as F
from pyspark.sql.types import LongType

df = df.withColumn('new_col', 
            F.when(df.z==6, 
                (df.z.cast(LongType()) * df.y.cast(LongType()))
            ).otherwise(df.z)
     )