pyspark列不可迭代

of1yzvn4  于 2021-05-17  发布在  Spark
关注(0)|答案(3)|浏览(547)

我有一个类似的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

bakd9h0s

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)))

kuuvgm7e

kuuvgm7e2#

定义时 my_list ,尝试使用:

my_list = list(['375', '012', '013','014','015','016'].toPandas())

其余代码保持不变。

exdqitrt

exdqitrt3#

扔掉那些垃圾 **expr - expr 是列,不应迭代/解包。

new_df = old_df.select("*",expr)

相关问题