2013-10-16 3 views
2

I가 다음 하이브 테이블하이브 집계 기능

ID, 클래스 값

1, A, 0.3

1 B 0.4

1, C 0.5

2 B 0.1

2 C 0.2 012

,

ID, class:value

1, [A:0.3, B:0.4, C:0.5]

2, [B:0.1, C:0.2]


내가 클래스 또는 값 목록의 목록을 생성하는 collect_set() UDAF 있다는 것을 알고있다 3,516,

나는 싶어 어쨌든 키 : 값 쌍의 목록을 얻으려면?

참고 : 나는 두 개의 collect_set() 클래스 열과 하나의 값 열에 대해 사용할 수 있다고 생각하지만 목록이 동일한 순서가 될지 확실하지 않습니다.

+0

유용한 UDF가있는 오픈 소스 프로젝트 인 brickhouse에는 가능한 collect()가 있습니다. http://brickhouseconfessions.wordpress.com/2013/02/21/lets-start-off-with-collect/ – viper

답변

3

저는 Brickhouse 라이브러리의 UnionUDAF를 사용하여 유사한 작업을 수행했습니다. 각 쌍에서 맵을 작성한 다음 집계 중에 이들을 모두 결합합니다.

Add JAR brickhouse.jar; 
create temporary function BH_union as 'brickhouse.udf.collect.UnionUDAF'; 

SELECT S.ID, BH_union(S.v_map) 
FROM (SELECT ID, map(class, value) as v_map from mytable) S 
GROUP by S.ID 
0

동일한 목표를 달성하기 위해 custom Map/Reduce scripts 및 collect_list() (Hive 0.13.0)를 사용할 수 있습니다.

더 많은 도움이 필요하면 알려주세요.