我有动态的列列表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());