【问题标题】:Aggregation of multiple columns in spark JavaSpark Java中多列的聚合
【发布时间】:2018-09-10 09:21:48
【问题描述】:

我有动态的列列表priceColumns。 我正在尝试聚合数据集中的这些列,

public Dataset getAgg(RelationalGroupedDataset rlDataset){
Dataset selectedDS=null;
    for(String priceCol :priceColumns){
            selectedDS=rlDataset.agg(expr("sum(cast("+priceCol+" as BIGINT))"));
        }
return selectedDS;
}

以上代码是不正确的代码, 我在这里尝试做的是,基于每个存在的列,聚合应该针对该数据集进行, 如何编写通用代码?我完全被困在这里了。

【问题讨论】:

    标签: java apache-spark group-by aggregate apache-spark-dataset


    【解决方案1】:

    我尝试了下面的方法,它解决了。

    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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多