我有一堆通常具有以下形式的日志:
userID features
1 time=4PM,userType=Casual,userType=Business,webSite=ebay
2 time=6AM,userType=Casual
我想基于个别功能进行聚合,即在凌晨4点登录的用户数,临时用户数等等。
我尝试的是以下内容 - 拆分用户ID并将功能划分为一定数量的单个功能。
userID features
1 time=4PM
1 userType=Casual
1 userType=Business
1 webSite=ebay
2 time=6AM
2 userType=Casual
现在,我可以聚合各个功能,并使用Spark中的HiveQL将计算出的统计信息写入文件。这种方法的问题是我在Hive中耗尽了内存。是否有更好的方法来汇总HIVE中的个体特征?
答案 0 :(得分:0)
您可以使用regexp_extract
来解析每行中的要素值,而不会增加总行数。为了进一步节省内存,您可以将表保存为Parquet格式:
create table logs_columns
(time string
,userType string
--etc
)
stored as parquet;
insert into table logs_columns
select userid
,rexexp_extract('time=([^,]*)', features, 1) time
,rexexp_extract('userType=([^,]*)', features, 1) userType
--etc
from logs;