聚合 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;
我有一堆典型的这种形式的日志:
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;