0

に選択し、削減SQL、私は次のようにUserBehaviorというクラスを持っている:スパークだからJavaの

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

私は、データセットからデータセットを作成し、はのitemIdとbhvCntを選択したかったし、同じ持っているすべての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は、行が抽象的であることを私にヒント:一緒に ITEMID、私はので、私はのようなコードを書いたのJavaを使用しています。

私が望むコードを書く正しい方法は何ですか?

+0

あなたの予想される出力は何ですか?サンプルデータがありますか?新しいRowの代わりにRowFactory.create(v1.getAs( "itemId")、v1.getDouble(1)+ v2.getDouble(1));を使用します。 – abaghel

+0

@abaghelデータがあり、データセットが欲しい 1つのカラムがitemIdを表し、もう1つが1つのアイテムの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); 

EDIT

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

関連する問題