spark Java 中多列的聚合
Aggregation of multiple columns in spark Java
我有动态的列列表 priceColumns
。
我正在尝试聚合数据集中的这些列,
public Dataset getAgg(RelationalGroupedDataset rlDataset){
Dataset selectedDS=null;
for(String priceCol :priceColumns){
selectedDS=rlDataset.agg(expr("sum(cast("+priceCol+" as BIGINT))"));
}
return selectedDS;
}
以上代码是错误的代码,
我想在这里做的是,基于每个列,该数据集应该发生聚合,
如何编写通用代码?我完全被困在这里了。
我尝试了下面的方法,它解决了。
List<Column> columnExpr = priceColumns.stream()
.map(col->expr("sum(cast("+col+" as BIGINT))").as(col))
.collect(Collectors.toList());
然后,
selectedDS= rlDataset
.agg(columnExpr.get(0),
JavaConverters.asScalaIteratorConverter(columnExpr.subList(1, columnExpr.size())
.iterator()).asScala().toSeq());
我有动态的列列表 priceColumns
。
我正在尝试聚合数据集中的这些列,
public Dataset getAgg(RelationalGroupedDataset rlDataset){
Dataset selectedDS=null;
for(String priceCol :priceColumns){
selectedDS=rlDataset.agg(expr("sum(cast("+priceCol+" as BIGINT))"));
}
return selectedDS;
}
以上代码是错误的代码, 我想在这里做的是,基于每个列,该数据集应该发生聚合, 如何编写通用代码?我完全被困在这里了。
我尝试了下面的方法,它解决了。
List<Column> columnExpr = priceColumns.stream()
.map(col->expr("sum(cast("+col+" as BIGINT))").as(col))
.collect(Collectors.toList());
然后,
selectedDS= rlDataset
.agg(columnExpr.get(0),
JavaConverters.asScalaIteratorConverter(columnExpr.subList(1, columnExpr.size())
.iterator()).asScala().toSeq());