복붙노트

[HADOOP] Hive 그룹에서 요소별로 배열 / 가방을 얻는 방법은?

HADOOP

Hive 그룹에서 요소별로 배열 / 가방을 얻는 방법은?

주어진 필드로 그룹화하고 그룹화 된 필드로 출력하고 싶습니다. 아래는 내가 달성하고자하는의 예입니다 :

아래와 같이 두 개의 열이있는 'sample_table'테이블을 상상해보십시오.

F1  F2
001 111
001 222
001 123
002 222
002 333
003 555

아래 출력을 제공하는 하이브 쿼리를 작성하고 싶습니다.

001 [111, 222, 123]
002 [222, 333]
003 [555]

돼지에서 이것은 다음과 같은 방법으로 쉽게 얻을 수 있습니다 :

grouped_relation = GROUP sample_table BY F1;

누군가 Hive에서 그렇게 할 수있는 간단한 방법이 있다면 제안 할 수 있습니까? 내가 생각할 수있는 것은 이것을 위해 UDF (User Defined Function)를 작성하는 것이지만 이것은 매우 시간 소모적 인 옵션 일 수 있습니다.

해결법

  1. ==============================

    1.collect_set (여기에 doumented) 된 집계 함수는 사용자가 원하는 것을 얻을 수 있도록합니다. 그것은 실제로 예제 입력에 작동합니다.

    collect_set (여기에 doumented) 된 집계 함수는 사용자가 원하는 것을 얻을 수 있도록합니다. 그것은 실제로 예제 입력에 작동합니다.

    SELECT F1, collect_set(F2)
    FROM sample_table
    GROUP BY F1
    

    불행히도 중복 요소를 제거하고 이것이 원하는 동작이 아니라고 생각합니다. collect_set이 존재한다는 것이 이상하게 들리지만, 중복을 유지할 버전은 없다. 다른 누군가는 분명히 똑같은 생각을했습니다. 그것은 당신에게 필요한 UDAF를 줄 것입니다 상단 및 두 번째 대답처럼 보입니다.

  2. ==============================

    2.정의에 따라 세트가 잘 정의되고 구별되는 객체, 즉 객체가 세트 내에서 정확히 한 번 또는 전혀 나타나지 않기 때문에 collect_set은 실제로 예상대로 작동합니다.

    정의에 따라 세트가 잘 정의되고 구별되는 객체, 즉 객체가 세트 내에서 정확히 한 번 또는 전혀 나타나지 않기 때문에 collect_set은 실제로 예상대로 작동합니다.

  3. from https://stackoverflow.com/questions/16444070/how-to-get-array-bag-of-elements-from-hive-group-by-operator by cc-by-sa and MIT license