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