开发者社区> 问答> 正文

维护历史表,其中包含有关userID-SQL的新数据的更新

社区小助手 2018-12-19 16:01:43 281

考虑到我有一个包含历史数据(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")
数据如下所示:

  • gaidfirst_app_access_datefirst_app_viewed_date
00001C8A-2326-469...2018-09-032018-09-03
00021783-C199-4FE...2018-09-012018-09-01
0003432f-6e30-4c0...2018-09-042018-09-04
000662ae-2b9b-468...2018-09-022018-09-02
0009ac47-c7a2-4b6...2018-09-012018-09-01
000c245b-58b1-492...2018-09-032018-09-03
000f327b-56dc-4c8...2018-09-012018-09-01
001149cb-f51c-4c0...2018-09-012018-09-01
0013ad65-2843-4d3...2018-09-042018-09-04
0015170a-fda1-41c...2018-09-052018-09-05
001cf486-035a-43e...2018-09-042018-09-04
001f2ecf-bf0f-47d...2018-09-03null
002053e8-2cf6-43f...2018-09-042018-09-04
002303e0-5aa4-4eb...2018-09-012018-09-01
0025f65c-5818-4c3...2018-09-01null
002807db-b0a2-487...2018-09-032018-09-03
002befcc-cdfd-463...2018-09-012018-09-01
00364046-b022-497...2018-09-02null

我想要做的是为用户找到第一个应用访问和第一个应用视图(gaid)。

现在,当我针对新月数据运行时,我想:

验证新数据中的gaid是否存在于历史数据中。
如果它存在,这意味着我们已经拥有第一个应用程序访问权限,我们什么都不做。
如果历史数据中没有gaid(这意味着它是一个新ID),它应该运行相同的查询来计算第一个应用访问和第一个应用视图,并将其插入到历史数据中。
对于特定的gaid,必须首先进行应用访问,并且第一个应用视图可以为空,因为一个人可以访问但稍后查看某些内容。
对于此类条目,它应更新历史数据中的第一个应用程序视图。

分布式计算 Spark
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:23:00

    对于1/2/3,我认为你应该使用RoaringBitmap来存储你的gaids,这意味着你需要将gaid转换为int数。但是,您需要注意转换,因为您无法以String.hashCode()之类的简单方式执行此操作,这可能会在RoaringBitmap中引入int冲突。

    对于4/5,它显然不是像HDFS这样的仅附加文件系统的典型场景。为了实现这一点,您必须利用一些外部分布式数据库或框架,如HBase,RocksDB和Alluxio。

    0 0
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题
推荐课程