唯一ID的最旧记录-SparkSQL

时间:2018-12-17 08:55:19

标签: sql apache-spark pyspark databricks

我在这里相对较新,所以我将尝试遵循SO的方法。

我正在研究数据块上的数据并处理以下数据:

    Distinct_Id                       Event                       Date
*some alphanumerical value*       App Access                  2018-01-09
*some alphanumerical value*       App Opened                  2017-23-01
           ...                        ...                          ...

数据表示:

每个distinct_id都标识一个不同的用户。有4个主要事件-应用访问,应用打开,应用启动,mediaReady。

问题:

  1. 我正在尝试查找特定的id的第一个应用访问日期。 应用程序访问权限定义为:事件(“应用程序访问”,“应用程序已打开”,“应用程序已启动”)

  2. 第一个应用查看特定特定id的日期。 查看的应用程序定义为:event =='mediaReady'

我的数据存在于实木复合地板文件中,并且数据量巨大(2年数据)。

我尝试了以下方法来找到第一个应用访问日期:

temp_result = spark.sql("
     with cte as(
       select gaid,  
              event, 
              event_date, 
              RANK() OVER (PARTITION BY gaid order by event_date) as rnk 
       from df_raw_data 
       WHERE upper(event) IN ('APP LAUNCHED', 'APP OPENED', 'APP ACCESS')
       group by gaid,event,event_date
     ) 
     select  DISTINCT gaid, event_date, event from cte where rnk = 1
")

我正在尝试编写一个健壮的查询,该查询将随着数据的增加而扩展并给出结果。 我希望我已经以一个体面的方式描述了这个问题。

1 个答案:

答案 0 :(得分:0)

感觉更像是透视查询:

SELECT
  gaid, 
  MIN(CASE WHEN event in ('App access', 'App opened', 'App Launched') THEN date END) as first_app_access_date,
  MIN(CASE WHEN event in ('mediaReady') THEN date END) as first_app_viewed_date
FROM df_raw_data 
GROUP BY gaid

我对spark db的大小写敏感等一无所知,因此您可能需要修复其中的一些问题。