我正在尝试使用
CHANNEL_ID
基于条件逻辑在 PySpark DataFrame 中添加新列 pyspark.sql.functions.when
,然后删除不再需要的旧列 channel_id
。但是,当我使用大写名称 CHANNEL_ID
时,新列不会出现在生成的 DataFrame 中。它似乎删除了新的 CHANNEL_ID
列。
这是我的代码:
import pyspark.sql.functions as f
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame(
[
(1, 101),
(2, 102),
(3, 103)
], schema="id int, channel_id int"
)
df.show()
这显示了预期的数据帧:
+---+----------+
| id|channel_id|
+---+----------+
| 1| 101|
| 2| 102|
| 3| 103|
+---+----------+
然后我尝试添加新列
CHANNEL_ID
并删除原始 channel_id
列:
df.withColumns(
{
"CHANNEL_ID": f.when(f.col("channel_id") == 101, "First channel")
.when(f.col("channel_id") == 102, "Second channel")
.otherwise("-")
}
).drop("channel_id").show()
我希望输出显示
id
列和新创建的 CHANNEL_ID
列,但结果却是这样:
+---+
| id|
+---+
| 1|
| 2|
| 3|
+---+
为什么
CHANNEL_ID
列被删除,即使我试图删除 channel_id
?看起来大写名称 CHANNEL_ID
在某种程度上干扰了 drop
方法。如果我将该列重命名为其他名称(例如 channel_alias
),它就可以正常工作。
此行为是否与 PySpark 中的区分大小写或命名冲突有关?任何解决此问题的澄清或建议将不胜感激!