복붙노트

[HADOOP] 다른 항목에 대한 하나 개의 조합에 의해 그룹과 다시 한 번 그룹을

HADOOP

다른 항목에 대한 하나 개의 조합에 의해 그룹과 다시 한 번 그룹을

여러분,

우리는 다음과 같은 데이터를 가지고 우리는 출력 다음이 필요합니다.

 CUSTOMER_NAME PRODUCT_NAME PRICE OCCURANCE ID
 customer1,    product1,    20,       1
 customer1,    product2,    30,       2
 customer1,    product1,    25,       3
 customer1,    product1,    20,       1
 customer1,    product2,    20,       2
 customer1,    product2,    30,       2

먼저 우리는 occurance의 ID로 가격을 평균 할 필요가있다.

 customer1,product1,20 (AVG is 20 for occurance 1), 1
 customer1,product1,25 (AVG is 25 for occurance 3) , 3

이제 다시 한번 우리는 CUSTOMERNAME, 제품 이름 (Occurance에 의해 그룹에서 무시)하여 평균해야

최종 출력 1 고객, 제품 1, 모든 항목의 평균 가격.

customer1,product1, 20 + 25/2 = 22.5

기본적으로 방법 HIVE 평균의 평균을 할까? 우리는이에 대한 아무 것도 쓸 수 없습니다.

해결법

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

    1.안녕하세요이 다음과 같이 중첩 된 쿼리를 사용하여 달성 될 수있다 :

    안녕하세요이 다음과 같이 중첩 된 쿼리를 사용하여 달성 될 수있다 :

    첫 번째 단계 : occurrence_id에 의해 가격의 초기 평균을 계산

    SELECT customer_name, product_name,occurance_id, avg(price) as avg_of_current_occurance
    FROM customer_info
    GROUP BY customer_name,product_name,occurance_id ;
    

    두 번째 단계 : avgs의 평균을 계산은 첫 번째 단계에서 반환

    hive (default)>
                  > SELECT customer_name, product_name,avg(avg_of_current_occurance) as final_avg
                  > FROM(
                  > SELECT customer_name, product_name,occurance_id, avg(price) as avg_of_current_occurance
                  > FROM customer_info
                  > GROUP BY customer_name,product_name,occurance_id
                  > ) W
                  > GROUP BY customer_name,product_name;
    
    Total MapReduce jobs = 1
    Launching Job 1 out of 1
    
    Execution completed successfully
    
    customer_name   product_name    final_avg
    customer1       product1        22.5
    customer1       product2        26.666666666666668   
    
  2. from https://stackoverflow.com/questions/23864735/group-by-one-combination-and-once-again-group-it-for-other-items by cc-by-sa and MIT license