在Pyspark可以做一个循环和案例吗?

时间:2017-07-21 12:58:49

标签: python sql pyspark case pyspark-sql

是否可以循环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中使用案例(比如何时?)

2 个答案:

答案 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(<你想要的任何列>)。s​​how()它会根据它来吐出表格您希望在该数据框中显示的列。)

答案 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]