0

그래서, 내가 좋아하는 UserBehavior라는 클래스가 있습니다 스파크 선택하고 자바로 감소 SQL

public class User_Behavior { 
private String userName; 
private String itemId; 
private double bhvCnt;} 

내가 후 감소, 같은이 모든 bhvCnt을 해당 itemId 및 bhvCnt을 선택하고 싶었 데이터 집합에서 데이터 집합 생성을

Dataset<Row> selected=dataset.select("itemId","bhvCnt"); 
    selected.reduce(new ReduceFunction<Row>() { 
     @Override 
     public Row call(Row v1, Row v2) throws Exception { 
      return new Row(v1.getAs("itemId"),v1.getDouble(1)+v2.getDouble(1)); 
     } 
    }); 

하지만 내 IDE가 행이 추상적 인 것을 나에게 힌트 : 항목 ID 함께, 나는 자바 그래서 내가 좋아하는 코드를 작성하십시오.

내가 원하는 코드를 작성하는 올바른 방법은 무엇입니까?

+0

예상되는 출력은 무엇입니까? 샘플 데이터가 있습니까? 새로운 행 대신에 RowFactory.create (v1.getAs ("itemId"), v1.getDouble (1) + v2.getDouble (1)); – abaghel

+0

@abaghel 데이터가 있고 데이터 집합이 필요합니다 한 열이 itemId를 나타내고 다른 열이 한 항목의 bhvCnt – zpwpal

답변

1

"itemId"열에서 groupBy을 사용하고 아래의 "bhvCnt"열에서 sum을 사용할 수 있습니다.

import static org.apache.spark.sql.functions.col; 

Dataset<Row> ds = selected.groupBy(col("itemId")).sum("bhvCnt"); 
ds.show(false); 

편집

import static org.apache.spark.sql.functions.col; 
import static org.apache.spark.sql.functions.sum; 

Dataset<Row> ds = selected.groupBy(col("itemId")).agg(sum("bhvCnt").as("sum")).sort(col("sum")); 
ds.show(false); 
+0

의 합계를 나타냅니다. 추가 질문과 더 많은 질문이 sum() 이후에 합계를 정렬하려고합니다. bhvCnt sort()에서 작동하지 않습니다. 어떻게 열의 이름을 지정할 수 있습니까? – zpwpal

+0

답을 편집하십시오. – abaghel

+0

오케이, 나는 단지 그린 핸드 일 뿐이며, 배울 것이 많다. 고마워. – zpwpal