[HADOOP] Hive 그룹에서 요소별로 배열 / 가방을 얻는 방법은?
HADOOPHive 그룹에서 요소별로 배열 / 가방을 얻는 방법은?
주어진 필드로 그룹화하고 그룹화 된 필드로 출력하고 싶습니다. 아래는 내가 달성하고자하는의 예입니다 :
아래와 같이 두 개의 열이있는 '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.collect_set (여기에 doumented) 된 집계 함수는 사용자가 원하는 것을 얻을 수 있도록합니다. 그것은 실제로 예제 입력에 작동합니다.
collect_set (여기에 doumented) 된 집계 함수는 사용자가 원하는 것을 얻을 수 있도록합니다. 그것은 실제로 예제 입력에 작동합니다.
SELECT F1, collect_set(F2) FROM sample_table GROUP BY F1
불행히도 중복 요소를 제거하고 이것이 원하는 동작이 아니라고 생각합니다. collect_set이 존재한다는 것이 이상하게 들리지만, 중복을 유지할 버전은 없다. 다른 누군가는 분명히 똑같은 생각을했습니다. 그것은 당신에게 필요한 UDAF를 줄 것입니다 상단 및 두 번째 대답처럼 보입니다.
-
==============================
2.정의에 따라 세트가 잘 정의되고 구별되는 객체, 즉 객체가 세트 내에서 정확히 한 번 또는 전혀 나타나지 않기 때문에 collect_set은 실제로 예상대로 작동합니다.
정의에 따라 세트가 잘 정의되고 구별되는 객체, 즉 객체가 세트 내에서 정확히 한 번 또는 전혀 나타나지 않기 때문에 collect_set은 실제로 예상대로 작동합니다.
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
'HADOOP' 카테고리의 다른 글
[HADOOP] override SemanticException [오류 10001] (0) | 2019.07.02 |
---|---|
[HADOOP] 이제 hadoop 및 spark가 IPv6을 지원합니까? (0) | 2019.07.02 |
[HADOOP] 파일을 HDFS에 저장하는 명령 (0) | 2019.07.02 |
[HADOOP] Java API를 사용하여 HDFS에 데이터 업로드 (0) | 2019.07.02 |
[HADOOP] NoSuchMethodError : org.apache.spark.sql.SQLContext.applySchema (0) | 2019.07.02 |