Агрегация нескольких столбцов в искровой Java - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть список столбцов priceColumns, которые являются динамическими. Я пытаюсь объединить эти столбцы в наборе данных,

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

приведенный выше код является неправильным кодом, То, что я пытаюсь сделать здесь, основано на том, что в каждом столбце присутствует агрегация для этого набора данных, Как я могу написать общий код? Я полностью застрял здесь.

1 Ответ

0 голосов
/ 10 сентября 2018

Я пробовал с помощью способа ниже, и он решил.

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