我正在处理将SQL代码转换为PySpark代码并遇到一些SQL语句。我不知道如何处理pyspark中的案例陈述?我打算创建一个RDD然后使用rdd.map然后做一些逻辑检查。这是正确的方法吗?请帮忙!
基本上我需要遍历RDD或DF中的每一行,并根据我需要编辑其中一个列值的逻辑。
case
when (e."a" Like 'a%' Or e."b" Like 'b%')
And e."aa"='BW' And cast(e."abc" as decimal(10,4))=75.0 Then 'callitA'
when (e."a" Like 'b%' Or e."b" Like 'a%')
And e."aa"='AW' And cast(e."abc" as decimal(10,4))=75.0 Then 'callitB'
else
'CallitC'
答案 0 :(得分:24)
我不擅长python。但是会尝试给出我在scala中所做的一些指示。
问题:
TYPE = 'WE' and CH = 'true'
然后进行一些逻辑检查。这是正确的做法吗?
它的一种方法。
withColumn
is another approach
在这种情况下,你必须处理rdd.map
via - spark udf或者语法
Column
您也可以使用udf代替from pyspark.sql import functions as F
df.select(df.name, F.when(df.age > 4, 1).when(df.age < 3, -1).otherwise(0)).show()
+-----+--------------------------------------------------------+
| name|CASE WHEN (age > 4) THEN 1 WHEN (age < 3) THEN -1 ELSE 0|
+-----+--------------------------------------------------------+
|Alice| -1|
| Bob| 1|
+-----+--------------------------------------------------------+
from pyspark.sql import functions as F
df.select(df.name, F.when(df.age > 3, 1).otherwise(0)).show()
+-----+---------------------------------+
| name|CASE WHEN (age > 3) THEN 1 ELSE 0|
+-----+---------------------------------+
|Alice| 0|
| Bob| 1|
+-----+---------------------------------+
when
。
答案 1 :(得分:0)
这是在If-Else
中写When-Then-Else
/ When-Otherwise
/ pyspark
表达式的几种方法。
示例数据框
df = spark.createDataFrame([(1,1),(2,2),(3,3)],['id','value'])
df.show()
#+---+-----+
#| id|value|
#+---+-----+
#| 1| 1|
#| 2| 2|
#| 3| 3|
#+---+-----+
选项#1 :withColumn()
,否则将使用
from pyspark.sql.functions import when
df.withColumn("value_desc",when(df.value == 1, 'one').when(df.value == 2, 'two').otherwise('other')).show()
选项#2 :select()
,否则将使用
from pyspark.sql.functions import when
df.select("*",when(df.value == 1, 'one').when(df.value == 2, 'two').otherwise('other').alias('value_desc')).show()
选项3: selectExpr()
使用SQL等效的CASE表达式
df.selectExpr("*","CASE WHEN value == 1 THEN 'one' WHEN value == 2 THEN 'two' ELSE 'other' END AS value_desc").show()
类似SQL的表达式也可以使用pyspark.sql.functions.expr函数用withColumn()
和select()
编写。这是示例。
选项4: select()
使用expr函数
from pyspark.sql.functions import expr
df.select("*",expr("CASE WHEN value == 1 THEN 'one' WHEN value == 2 THEN 'two' ELSE 'other' END AS value_desc")).show()
选项5: withColumn()
使用expr函数
from pyspark.sql.functions import expr
df.withColumn("value_desc",expr("CASE WHEN value == 1 THEN 'one' WHEN value == 2 THEN 'two' ELSE 'other' END AS value_desc")).show()
输出:
#+---+-----+----------+
#| id|value|value_desc|
#+---+-----+----------+
#| 1| 1| one|
#| 2| 2| two|
#| 3| 3| other|
#+---+-----+----------+