让我们说给定一个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']
被识别为列对象并且投射它们不会起作用......
我该如何正确地做到这一点?
答案 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)
)