是否可以循环Pyspark中的某些数据,然后根据案例陈述提出新值? (因为我已经学会了Python中不存在的情况)。
例如:如果我的表是
DAYOFWEEK
Monday
Tuesday
Monday
Wednesday
Monday
我的案例陈述就像是
Case
When "DayOfWeek" is "Monday" then = 1
When "DayOfWeek" is "Tuesday" then = 2
When "DayofWeek" is "Wednesday" then =3
然后输出就像:
DayNumber
1
2
1
3
1
我猜我需要做一些循环 - 循环遍历每个循环并在循环的那一步中将当前值应用于case语句 - 但我迷失了如何实现这一点。案例在Python中是不可能的?我应该只做el? 我应该在SQL中使用案例(比如何时?)
答案 0 :(得分:1)
我最终得到了它 - 这是我用过的其他人感兴趣的事情!
df = df.select('*',
when(df.DayofWeek == 'Monday', 1)
.when(df.DayofWeek == 'Tuesday', 2)
.when(df.DayofWeek == 'Wednesday', 3)
.otherwise(None).alias('DayNumber'))
我了解到我不需要进行for循环并循环遍历每个循环,只是单独执行此操作,将条件的逻辑应用于每个值。
那为我解决了什么! (然后你可以展示它以确保它是正确的 - 那只是存储它(df.select(<你想要的任何列>)。show()它会根据它来吐出表格您希望在该数据框中显示的列。)
答案 1 :(得分:0)
从python3.7开始,这还没有实现。 Py docs, 4.1. if Statements读取,
if ... elif ... elif ... sequence是替换其他语言中的switch或case语句。
另一种方法是使用像这样的字典函数,
def dayNumber(day):
return {
"Monday": 1,
"Tuesday": 2,
"Wednesday": 3,
# etc.
}[day]