Как присвоить значения более чем одному столбцу в операторе spark sql case / when - PullRequest
1 голос
/ 04 апреля 2020

У меня серьезное заболевание. Я извлекаю 2 поля из описания случая. Я могу написать 2 оператора case (завершить те же логики c), чтобы получить значения каждого поля отдельно. Могу ли я узнать, есть ли простой способ позаботиться об этой ситуации? Примечание в Sas оба могут быть получены в одной кодовой базе.

Получение 2 полей: [apps_per_assoc_range, sortvar3]

Пример:

assoc_rangeExpr='''
CASE WHEN avg_apps_per_month<=avg_apps_per_month_per_assoc_str THEN 'LT or EQUAL to Store Average' \
     WHEN (avg_apps_per_month > avg_apps_per_month_per_assoc_str) and (avg_apps_per_month<= 2*avg_apps_per_month_per_assoc_str )THEN '2X Store Average' \
     Continues for 30 lines
    else 'NULL' END as apps_per_assoc_range '''

sortvar3Expr='''
CASE WHEN avg_apps_per_month<=avg_apps_per_month_per_assoc_str THEN 1 \
     WHEN (avg_apps_per_month > avg_apps_per_month_per_assoc_str) and (avg_apps_per_month<= 2*avg_apps_per_month_per_assoc_str )THEN 2 \
     Continues for 30 lines
    else 0 END as sortvar3 '''  

С уважением, Sanjeeb

1 Ответ

2 голосов
/ 04 апреля 2020

вы можете использовать struct. Вот пример:

import spark.implicits._
    val df = Seq( ("a",1),("b",2),("b",1)
              ).toDF("type","count")
              .withColumn("description", expr("case when count> 0 then struct('gain' as scale, 'positive' as category) else struct('loss' as scale,'negative' as category) end"))
              .select(col("type"), col("count"), col("description.scale").as("scale"), col("description.category").as("category"));
    df.show()
+----+-----+-----+--------+
|type|count|scale|category|
+----+-----+-----+--------+
|   a|    1| gain|positive|
|   b|    2| gain|positive|
|   b|    1| gain|positive|
+----+-----+-----+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...