我想创建一个新列,其中包含列中列出的列名的值数组lookup
。
示例输入
input_df = spark.createDataFrame([
Row(id=123, alert=1, operation=1, lookup=[]),
Row(id=234, alert=0, operation=0, lookup=['alert']),
Row(id=345, alert=1, operation=0, lookup=['operation']),
Row(id=456, alert=0, operation=1, lookup=['alert', 'operation']),
])
预期输出
ID | 警报 | 手术 | 抬头 | 查找值 |
---|---|---|---|---|
123 | 1 | 1 | [] |
[] |
234 | 0 | 0 | [alert] |
[0] |
345 | 1 | 0 | [operation] |
[0] |
456 | 0 | 1 | [alert, operation] |
[0, 1] |
我尝试过
input_df.withColumn("lookup_values", F.transform(F.col("lookup"), lambda x: input_df[f'{x}'])).show()
失败并出现以下错误:
AnalysisException:[UNRESOLVED_COLUMN.WITH_SUGGESTION] 无法解析名称为 的列或函数参数
Column<'x_1'>
。您是指下列之一吗?[id
,alert
,operation
,lookup
]。
这个错误令人惊讶,因为下面的代码虽然没有产生预期的结果,但却没有产生错误:
input_df.withColumn("lookup_values", F.transform(F.col("lookup"), lambda x: input_df['alert'])).show()
ID | 警报 | 手术 | 抬头 | 查找值 |
---|---|---|---|---|
123 | 1 | 1 | [] |
[] |
234 | 0 | 0 | [alert] |
[0] |
345 | 1 | 0 | [operation] |
[1] |
456 | 0 | 1 | [alert, operation] |
[0, 0] |