当第二个参数是字符串时如何使用 df.withColumn()

How to use df.withColumn() when second argument is string

假设我们有一个数据框 df 并执行以下操作:

df = df.withColumn('age2', df.age + 2)

我们得到了一个新的数据框。假设正在从文件中读取 df.age + 2(因此它是一个字符串)。如何在不使用 eval 的情况下将其转换为列表达式?

如果文本是有效的 Spark SQL 表达式,例如 age + 2,那么您可以简单地使用 pyspark.sql.functions 中的 expr 将其转换为列:

import pyspark.sql.functions as F

df = df.withColumn('age2', F.expr('age + 2'))

如果文本是 Python 源代码,如 df.age + 2,那么您没有很多不涉及 eval 或它的重新实现的替代方案。

如果文本既不是有效的 Spark SQL 表达式也不是有效的 Python 代码,您需要为文本具有的任何语法编写解析器,并编写代码将该语法中的表达式转换为调用 Spark API.