Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark spark sql表达式中的IF和ELSE语句_Pyspark_Apache Spark Sql_Pyspark Dataframes - Fatal编程技术网

Pyspark spark sql表达式中的IF和ELSE语句

Pyspark spark sql表达式中的IF和ELSE语句,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我希望运行一个sql表达式,检查下一个事件是“已交付”还是“已取消订单”,并根据第一个事件返回不同的结果 df = spark.createDataFrame([["ORDER", "2009-11-23", "1"], ["DELIVERED", "2009-12-17", "1"], ["ORDER-CANCELED", "2009-11-25

我希望运行一个sql表达式,检查下一个事件是“已交付”还是“已取消订单”,并根据第一个事件返回不同的结果

df = spark.createDataFrame([["ORDER", "2009-11-23", "1"], ["DELIVERED", "2009-12-17", "1"], ["ORDER-CANCELED", "2009-11-25", "1"], ["ORDER", "2009-12-03", "1"]]).toDF("EVENT", "DATE", "ID")
    
+--------------+----------+---+
|         EVENT|      DATE| ID|
+--------------+----------+---+
|         ORDER|2009-11-23|  1|
|ORDER-CANCELED|2009-11-25|  1|
|         ORDER|2009-12-03|  1|
|     DELIVERED|2009-12-17|  1|
+--------------+----------+---+
我已经使用以下代码编写了一个仅适用于已交付事件的语句:

df = df.withColumn("NEXT", f.expr("""
    case when EVENT = 'ORDER' then 
        first(if(EVENT in ('DELIVERED'), 'SUCCESS', null), True)
        over (Partition By ID ORDER BY ID, DATE ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) 
    else null end
    """))
这是可行的,但我不知道如何为else语句“ORDER-cancelled”添加第二个条件

df = df.withColumn("NEXT", f.expr("""
    case when EVENT = 'ORDER' then 
        first(if(EVENT in ('DELIVERED'), 'SUCCESS', null) 
        **elseif(EVENT in ('ORDER-CANCELED'), 'CANCELED'), True)**
        over (Partition By ID ORDER BY ID, DATE ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) 
    else null end
    """))

也许是这样的

df=df.withColumn(
“下一步”,
f、 表达式(“”)
事件为'ORDER'时的情况,然后
首先(
事件发生在(“已交付”)时,则
“成功”
当事件处于(“订单取消”)状态时
“取消”
其他的
无效的
结束
)over(按ID划分,按ID排序,日期行介于1个后续项和无界后续项之间)
否则无效
结束
"""))

当无处不在时,为什么不使用一个
案例呢?这就是sql“if-then”语句。不要混合语法