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;

}

上面的代码是一个不正确的代码,我在这里尝试做的是,基于每个列存在,聚合应该为该数据集发生,我如何编写通用代码?我完全被困在这里。


炎炎设计
浏览 296回答 1
1回答

SMILET

我用下面的方式尝试过,它解决了。List<Column>&nbsp;columnExpr&nbsp;=&nbsp;priceColumns.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(col->expr("sum(cast("+col+"&nbsp;as&nbsp;BIGINT))").as(col)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());然后,selectedDS=&nbsp;rlDataset &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.agg(columnExpr.get(0), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaConverters.asScalaIteratorConverter(columnExpr.subList(1,&nbsp;columnExpr.size()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.iterator()).asScala().toSeq());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java