PySpark中基于metric列过滤值创建新列k的实现问题
修正PySpark DataFrame新增列
k的代码实现 原代码的错误点
when函数语法错误:正确调用方式是when(条件表达式, 结果值),你错误地将条件和结果包装成元组传入,导致语法不合法。- 引用错误列进行数值计算:你使用了字符串类型的
metric列做除法运算,这会引发类型错误,应该使用数值列(根据你的代码逻辑推断是x列)。 - 数值写法错误:Python中小数点是
.而非逗号,2,54会被解析为元组,导致计算逻辑错误。 - 空值返回错误:需求要求其他情况返回空值,你返回的是空字符串
' ',不符合要求,应该返回None(用lit(None)实现)。
修正后的代码
首先导入必要的PySpark函数:
from pyspark.sql.functions import col, when, lit
然后执行列新增逻辑:
dataframe = dataframe.withColumn( 'k', when(col('metric') == 'M', col('x') / 10) .when(col('metric') == 'I', col('x') / 10 * 2.54) .otherwise(lit(None)) )
运行结果
+---+-------+-------+------+---+---+-----+ | ID| NAME|college|metric| x| y| k| +---+-------+-------+------+---+---+-----+ | 1| Amit| DU| I| 8| 6|2.032| | 2| Mohit| DU| I| 4| 2|1.016| | 3| rohith| BHU| I| 5| 3|1.27 | | 4|sridevi| LPU| I| 1| 6|0.254| | 1| sravan| KLMP| M| 2| 4|0.2 | | 5|gnanesh| IIT| M| 6| 8|0.6 | | 6|gnadesh| KLM| c| 10| 9| null| +---+-------+-------+------+---+---+-----+
内容的提问来源于stack exchange,提问作者Gaaaa
相关产品推荐
相关产品推荐

