apache-spark - 为什么这个嵌套的“何时”在 pyspark 中不起作用?
问题描述
我正在尝试将人们划分为年龄范围
from pyspark import SparkFiles
from pyspark.sql import functions as fn
## Import data
url_users = "https://raw.githubusercontent.com/leanhdung1994/BigData/main/users.csv"
spark.sparkContext.addFile(url_users)
users_from_file = spark.read.csv("file://" + SparkFiles.get("users.csv"), header = True, sep = ",", inferSchema = True)
## Generate column age
reference_date = date(2017, 12, 31)
from pyspark.sql.types import IntegerType
def cal_age(born):
return reference_date.year - born.year - ((reference_date.month, reference_date.day) < (born.month, born.day))
users_from_file = users_from_file.withColumn('age', cal_age_udf(fn.to_date(fn.col('birth_date'))))
## Generate column range
users_from_file1 = users_from_file.withColumn('range', fn.when(fn.col("age") <= 25, 1)fn.when(fn.col("age") <= 35, 2).fn.otherwise(3))
users_from_file1.show()
然后它返回一个错误
SyntaxError: invalid syntax
File "<command-2296735704765764>", line 3
users_from_file1 = users_from_file.withColumn('range', fn.when(fn.col("age") <= 25, 1)fn.when(fn.col("age") <= 35, 2).fn.otherwise(3))
^
SyntaxError: invalid syntax
您能否详细说明一下这个嵌套when
?这个语法When
来自这个答案,但它不起作用。
解决方案
它应该是
fn.when(fn.col("age") <= 25, 1).when(fn.col("age") <= 35, 2).otherwise(3)
无需fn
在第一个之后再次指定when
。
推荐阅读
- javascript - 如何将其转换为 html 可读代码?
- javascript - HighCharts 图形无法在 Internet Explorer 上运行
- c# - 根据行数将数据集拆分为多个表
- java - 如何在使用 Graphics 的 Abstract 所需的方法中使用 Graphics2D
- c++ - c ++预期的左大括号以及重新定义错误
- java - 有没有办法将一个方法用作 Java 中另一个方法的输入变量?
- c# - 如何等待方法完成然后执行新操作?
- c# - C#:FileStream.ReadByte() 是多线程友好函数吗?
- java - 为什么我的 Eclipse JRE 库 JDK 13 未绑定?
- azure - 是否可以将更改源处理器主机作为 Azure Web 作业运行?