큰 데이터 처리에서 그룹 의 요약을 기존의 쿼리 구조 (그룹화, 하위 쿼리 등)를 변경하지 않고 "스케치"하는 것이 좋습니다. Spark SQL (및 HiveQL)에서 collect_set
은이를 수행하는 UDAF의 예입니다. 그룹당 고유 한 값의 열을 만듭니다.키 별 값에 대한 스파크/하이브 UDAF
,
date user_id category revenue
1/1 1 a 1
1/1 2 b 0
1/1 3 a 0
1/2 2 b 10
1/2 3 a 0
1/2 4 b 1
쿼리
select date, collect_set_by_key(category, user_id) as distinct_user_ids_by_category
from tbl
group by date
order by date
해야 생성
date distinct_user_ids_by_category
1/1 {a: [1, 3], b: [2]}
1/2 {a: [3], b: [2, 4]}
Collect to a Map in Hive 같은 결과가 필요하지만 필요하지 않습니다. 이 솔루션은 쿼리 구조를 변경하지 않고 단일 UDAF를 통해 이루어 지므로이 질문은 실질적으로 다릅니다.
내 배포 환경이 Spark 2.1이므로 하이브 UDAF 또는 기본 Spark UDAF가 동일하게 작동합니다. 나는 brickhouse, hivemall 및 Hive UDAFs가있는 몇 가지 다른 라이브러리를 점검했지만이 작업을 수행하지는 못했습니다.
이 질문은 매우 유사합니다. http://stackoverflow.com/questions/24826530/collect-to-a-map-in-hive – Mariusz
@Mariusz 그 질문은 솔루션이 UDAF이고 쿼리 구조가 변경되지 않았 음을 나타냅니다. – Sim
그룹화를 변경하면 무엇을 의미합니까? 달성하려는 바를 정확히 설명해 주시겠습니까? –