我有一个类似的df:
old_df = sqlContext.createDataFrame(
[ ('375', 20),
('265', 20),
('052', 20),
('111', None),
],
['old_col', 'example_new_col_val'])
我需要通过对照列表检查我的旧列的值来创建一个新列。我是pyspark的新手,不明白我的错误信息。以下是我尝试过的:
from pyspark.sql import functions as F
my_list = ['375', '012', '013','014','015','016']
expr = F.when(F.col("old_col").isin(my_list),F.lit(20)).otherwise(None).alias("new_col")
new_df = old_df.select("*",*expr)
我的错误消息: TypeError: Column is not iterable
3条答案
按热度按时间bakd9h0s1#
你需要使用
withColumn()
函数,以便创建新的column
现有Dataframe的df = df.withColumn("new_col", F.when(F.col("old_col").isin(my_list), F.lit("20")).otherwise(F.lit(None)))
kuuvgm7e2#
定义时
my_list
,尝试使用:其余代码保持不变。
exdqitrt3#
扔掉那些垃圾
*
在*expr
-expr
是列,不应迭代/解包。