当第二个参数是字符串时如何使用 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.
假设我们有一个数据框 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.