PySpark中如何将Python变量传入Spark命令?
解决PySpark中Python变量传入条件判断的问题
直接用lit()把Python变量转换成Spark可识别的字面量就行,你的代码主要有两个问题:
- 直接写
CurrentYear时,Spark会把它当成列名而非变量值 otherwise里的Lit写错了,PySpark里对应的函数是小写的lit()
正确写法示例:
from pyspark.sql.functions import col, when, lit CurrentYear = '2022' df = df.withColumn( 'IsCurrentYear', when(col('ColumnName') == lit(CurrentYear), lit('Y')).otherwise(lit('n')) )
如果你的ColumnName是数值类型(比如整数格式的年份),只要把CurrentYear定义成整数2022,再传入lit()即可,不需要加引号。
另外你之前尝试的lit('{CurrentYear}')没生效,是因为单引号包裹的内容不会触发Python变量解析,就算改成lit(f'{CurrentYear}')能运行,但直接把变量传给lit()的写法更简洁。
内容的提问来源于stack exchange,提问作者Yadmaster
相关产品推荐
相关产品推荐

