激发 sql select 并减少 Java
Spark sql select and reduce in Java
所以,我有一个名为 UserBehavior 的 class,例如:
public class User_Behavior {
private String userName;
private String itemId;
private double bhvCnt;}
我从数据集创建了一个数据集,想要 select itemId 和 bhvCnt,然后将所有具有相同 itemId 的 bhvCnt 归约在一起,我使用 Java 所以我写了这样的代码:
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 提示我 Row 是抽象的。
编写我想要的代码的正确方法是什么?
您可以在 "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);
所以,我有一个名为 UserBehavior 的 class,例如:
public class User_Behavior {
private String userName;
private String itemId;
private double bhvCnt;}
我从数据集创建了一个数据集,想要 select itemId 和 bhvCnt,然后将所有具有相同 itemId 的 bhvCnt 归约在一起,我使用 Java 所以我写了这样的代码:
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 提示我 Row 是抽象的。
编写我想要的代码的正确方法是什么?
您可以在 "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);