【发布时间】:2018-02-17 01:55:12
【问题描述】:
我使用 Spark Streaming 来处理在线需求,例如每小时的新用户数,如下所示:
每批,当log到来时,从hbase或dynamodb等外部表中选择uid,如果不存在则插入表
这种方法使用表的频率太高,花费太多。
现在我想使用结构化流来解决这个问题。
下面的sql可以离线解决问题:
sql1
create table event_min_table as select pageid,uid,floor(min(time)/36000)*3600 as event_time from event_table group by pageid,uid
sql2
select pageid,count(distinct uid) as cnt from event_min_table group by pageid,event_time
由于我对结构化流不熟悉,结构化流不支持多重聚合,所以我是这样使用的:
readStream创建查询为sql1然后在内存中注册为表,输出模式为complete从使用
sql2的表创建查询,输出格式为update,保存到外部表,如hbase或dynamodb
我不知道我的方法能否解决问题,但我有几个问题:
如果我在
complete输出模式下创建内存表,随着时间的推移数据会变大吗?即使这样也可以,但是每次日志来的时候结果是否输出,所以问题还是没有解决,我的目标是减少对外部表的请求,例如hbase或dynamodb
【问题讨论】:
-
“但我有几个问题” 一次只有一个问题(根据 StackOverflow 规则)。我仍然不清楚你在问什么。
标签: apache-spark spark-structured-streaming