考虑到我有一个包含历史数据(2年)的表,该数据是在spark中运行以下查询后创建的:
temp_result = 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 df_raw_data
GROUP BY gaid")
数据如下:
- --------------------+---------------------+---------------------+
| gaid|first_app_access_date|first_app_viewed_date|
+--------------------+---------------------+---------------------+
|00001C8A-2326-469...| 2018-09-03| 2018-09-03|
|00021783-C199-4FE...| 2018-09-01| 2018-09-01|
|0003432f-6e30-4c0...| 2018-09-04| 2018-09-04|
|000662ae-2b9b-468...| 2018-09-02| 2018-09-02|
|0009ac47-c7a2-4b6...| 2018-09-01| 2018-09-01|
|000c245b-58b1-492...| 2018-09-03| 2018-09-03|
|000f327b-56dc-4c8...| 2018-09-01| 2018-09-01|
|001149cb-f51c-4c0...| 2018-09-01| 2018-09-01|
|0013ad65-2843-4d3...| 2018-09-04| 2018-09-04|
|0015170a-fda1-41c...| 2018-09-05| 2018-09-05|
|001cf486-035a-43e...| 2018-09-04| 2018-09-04|
|001f2ecf-bf0f-47d...| 2018-09-03| null|
|002053e8-2cf6-43f...| 2018-09-04| 2018-09-04|
|002303e0-5aa4-4eb...| 2018-09-01| 2018-09-01|
|0025f65c-5818-4c3...| 2018-09-01| null|
|002807db-b0a2-487...| 2018-09-03| 2018-09-03|
|002befcc-cdfd-463...| 2018-09-01| 2018-09-01|
|00364046-b022-497...| 2018-09-02| null|
我想做的是找到用户(gaid)的第一个应用程序访问权限和第一个应用程序视图。
现在,当我针对新的月份数据运行此操作时,我想:
我很难执行此操作。帮助将不胜感激!
答案 0 :(得分:0)
这实际上是一个非常大的项目,但是我可以根据我的经验为您提供一些建议。
对于1/2/3,我认为您应该使用RoaringBitmap来存储您的步态,这意味着您需要将步态转换为整数。但是,您需要注意转换,因为您不能像String.hashCode()这样的简单方法来完成转换,这可能会在RoaringBitmap中引入int冲突。
对于4/5,这显然不是HDFS之类的仅附加文件系统的典型方案。为了实现这一目标,您必须利用一些外部分布式数据库或框架,例如HBase,RocksDB和Alluxio。