pyspark将列值替换为when函数给定的列对象不可调用



我有一个类似的表

name
----
A
B
ccc
D
eee

以及有效名称的列表

legal_names = [A, B, D]

并且我想用另一个字符串"替换所有非法名称;无效";。

我使用了这个脚本:

(
df.withColumn(
"name",
F.when((F.col("name").isin(legal_names)), F.col("name")).otherwhise(
F.lit("INVALID")
),
)
)

但是我得到这个错误


TypeError: 'Column' object is not callable
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
File <command-4397929369165676>:4, in <cell line: 2>()
1 (
2     df.withColumn(
3         "name",
----> 4         F.when((F.col("name").isin(legal_names)), F.col("name")).otherwhise(
5             F.lit("INVALID")
6         ),
7     )
8 )
TypeError: 'Column' object is not callable

要复制的伪数据:

vals = [("A", ), ("B", ), ("ccc", ), ("D", ), ("EEE", )]
cols = ["name"]
legal_names = ["A", "B", "D"]
df = spark.createDataFrame(vals, cols)

尝试使用以下代码-

df1 = df.withColumn( "name", F.when( (F.col("name").isin(*legal_names)), F.col("name") ).otherwise(F.lit('INVALID'))  )

输出:

+-------+
|   name|
+-------+
|      A|
|      B|
|INVALID|
|      D|
|INVALID|
+-------+

最新更新