聚合 HIVE 中的特征

Aggregation on features in HIVE

我有一堆典型的这种形式的日志:

 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 中的各个特征?

您可以使用 regexp_extract 来解析每一行的特征值,而不增加总行数。为了进一步节省内存,您可以将 table 保存为 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;