规范化 Hive 中的横向爆炸

Posted

技术标签:

【中文标题】规范化 Hive 中的横向爆炸【英文标题】:Normalising Lateral Explode in Hive 【发布时间】:2019-06-10 08:19:39 【问题描述】:

我有一个表,其中有一个字段中的数组列表。我正在这张桌子上进行横向爆炸以获取元素。但是这样做,价值也在成倍增加。

Table:

Sitedomain      Keyword                             Clicks

msn.com         sports,cricket,accessories           100
yahoo.com       fashion,accessories                   50

执行横向爆炸后,我的输出类似于

 Sitedomain     Keyword       Clicks

 msn.com        sports        100
 msn.com        cricket       100
 msn.com        accessories   100
 yahoo.com      fashion        50
 yahoo.com      accessories    50

如您所见,指标也在爆炸式增长。无论如何要规范化这些数据,以便指标除以数组中的元素数?所以输出看起来像

 Sitedomain     Keyword       Clicks

  msn.com        sports        33.3
  msn.com        cricket       33.3
  msn.com        accessories   33.3
  yahoo.com      fashion        25
  yahoo.com      accessories    25

【问题讨论】:

【参考方案1】:

按关键字数组大小划分点击次数:

with your_table as(
select stack(2,
'msn.com',         'sports,cricket,accessories',           100,
'yahoo.com',       'fashion,accessories',                   50
) as (Sitedomain,Keyword,Clicks)
)

select Sitedomain,k.Keyword,round(s.Clicks/size(Keyword_aray),1) as Clicks
from
(
select Sitedomain,
       split(Keyword,',')  Keyword_aray, 
       Clicks
  from your_table
)s  lateral view explode(Keyword_aray) k as keyword
;

返回:

msn.com         sports          33.3
msn.com         cricket         33.3
msn.com         accessories     33.3
yahoo.com       fashion         25.0
yahoo.com       accessories     25.0

我添加了round() 以获得与您的示例一样的精度,如果没有必要,请将其删除。

【讨论】:

以上是关于规范化 Hive 中的横向爆炸的主要内容,如果未能解决你的问题,请参考以下文章

深度学习中的规范化(BNLN等四种规范化)

Hive/Impala 中的多维分析

hive开发规范

hive表命名规范 源码规则

Hive开发要知道数据仓库的四个层次设计

如何将字符串转换为hive中的struct数组并进行爆炸?