我在这里相对较新,所以我将尝试遵循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。
问题:
我正在尝试查找特定的id的第一个应用访问日期。 应用程序访问权限定义为:事件(“应用程序访问”,“应用程序已打开”,“应用程序已启动”)
第一个应用查看特定特定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
")
我正在尝试编写一个健壮的查询,该查询将随着数据的增加而扩展并给出结果。 我希望我已经以一个体面的方式描述了这个问题。
答案 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的大小写敏感等一无所知,因此您可能需要修复其中的一些问题。