我正在研究数据砖上的spark并使用以下数据:
Distinct_Id Event Date
some alphanumerical value App Access 2018-01-09
some alphanumerical value App Opened 2017-23-01
... ... ...
数据意味着:
每个distinct_id标识一个不同的用户。有4个主要事件 - 应用程序访问,应用程序打开,应用程序启动,mediaReady。
问题:
我正在尝试找到特定distinct_id的第一个应用访问日期。应用程序访问定义为:事件('应用程序访问','应用程序打开','应用程序启动')
第一个应用查看了特定distinct_id的日期。应用查看定义为:event =='mediaReady'
我的数据存在于parquet文件中,数据量巨大(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
")
我正在尝试编写一个强大的查询,它将随着数据的增加而扩展并给出结果。
感觉更像是一个数据透视查询:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。