我有一个表T
,其中包含列:
cookie string
keywords array<string>
fqdn string
pixel bigint
我想写点像
select cookie, ???? from T group by cookie;
获取包含列
的表格cookie string
keywords map<string,int>
fqdn map<string,int>
pixel array<bigint>
,其中
cookie
是唯一的(由by cookie
保证)keywords
计算关键字在原始表T
fqdn
计算域在给定Cookie的所有行中出现的次数pixel
计算像素在给定Cookie的所有行中出现的次数答案 0 :(得分:1)
你实际上可以使用&#34;向量&#34; Brickhouse中的UDF(http://github.com/klout/brickhouse)。在Brickhouse中,数组或地图可以被视为&#34; vector&#34;。对于数组,数组索引被视为维度,数值被视为该维度中的大小。对于地图,我们将字符串键视为&#34;尺寸&#34;在非常大的空间中的矢量,并且地图值是幅度。 (这是针对文本分析类型的问题,类似于你正在做的事情)。
以下内容应该有效
SELECT cookie,
union_vector_sum( keyword_map),
union_vector_sum( map( fqdn, 1 ) ),
collect_set( pixel)
FROM (
SELECT cookie, fqdn, pixel,
collect( keyword, 1 ) as keyword_map
FROM T
LATERAL VIEW explode( keywords ) k as keyword
GROUP BY cookie, fqdn, pixel ) xk
GROUP BY cookie;
我们可能应该有一个新的Map构造函数UDF,它接受一个数组和一个值,所以我们不需要内部爆炸和收集。我不认为它会以这种形式产生额外的map-reduce步骤。
有一些矢量,和#34;字袋&#34;现在Brickhouse中的UDF,我们可能应该添加更多。你有什么特别要求吗?