Вложенный случай, когда в улье - ИСКРА - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть таблица (join_df), которая выглядит следующим образом:

+------------------------------------+----------+--------------+---------------------+---------------------+
|gaid                                |event     |date_stamp_ist|first_app_access_date|first_app_viewed_date|
+------------------------------------+----------+--------------+---------------------+---------------------+
|001f2ecf-bf0f-47dc-a2b2-b526b5b3292e|App Opened|2018-10-06    |2018-09-03           |null                 |
|001f2ecf-bf0f-47dc-a2b2-b526b5b3292e|App Access|2018-10-06    |2018-09-03           |null                 |
|001f2ecf-bf0f-47dc-a2b2-b526b5b3292e|App Opened|2018-10-06    |2018-09-03           |null                 |
|001f2ecf-bf0f-47dc-a2b2-b526b5b3292e|App Access|2018-10-06    |2018-09-03           |null                 |
|001f2ecf-bf0f-47dc-a2b2-b526b5b3292e|App Access|2018-10-06    |2018-09-03           |null                 |
+------------------------------------+----------+--------------+---------------------+---------------------+

Исходя из этого, я создаю новый кадр данных по следующей логике:

spark.sql("SELECT gaid,MIN(CASE WHEN upper(event) in ('APP ACCESS', 'APP 
OPENED', 'APP LAUNCHED') THEN date_stamp_ist END) as 
first_app_access_date,MIN(CASE WHEN upper(event) in ('MEDIAREADY', 'MEDIA 
READY') THEN date_stamp_ist END) as first_app_viewed_date FROM joined_df 
GROUP BY gaid"

Проблема заключается в, для записей, показанных как во фрагменте выше, первый app_access_date уже рассчитан.И вышеупомянутый запрос пересчитает это и обновит значение для этой подсказки к неправильному последнему значению, используя date_stamp_ist.

Я хочу вставить случай, когда в вышеуказанном запросе проверяется:

  1. Если join_df.first_app_access_date! = "Null", то firs_app_access_date.Однако, если join_df.first_app_access_date == "null", то:

    MIN (СЛУЧАЙ, КОГДА верхний (событие) в ('APP ACCESS', 'APP OPENED', 'APP LAUNCHED') THEN date_stamp_ist END) какfirst_app_access_date

  2. Аналогичная проверка для first_app_view_date:

Если df_joined.first_app_viewed_date! = "null", то first_app_viewed_date Если first_app_viewed_date! first_app_viewed_date! = "null" тогда *

MIN(CASE WHEN upper(event) in ('MEDIAREADY', 'MEDIA 
    READY') THEN date_stamp_ist END) as first_app_viewed_date FROM joined_df 
    GROUP BY gaid"
*

Нужны эти 2 проверки в начальном запросе в случае, когда.Я не уверен, что лучший подход.

...