Java Spark:如何在数据集上进行flatMap,并为后续的groupBy提供新的模式?
我有以下代码:
public static void main(String[] args) {
Dataset<Row> myDataset = spark.read().parquet(PATH);
Dataset<Row> groupedDataset = myDataset
.flatMap((FlatMapFunction<Row, Row>) (row) -> flatMapFunc(row), Encoders.bean(Row.class))
.groupBy("group_id")
.max("max_col");
}
private static Iterator<Row> flatMapFunc(Row row) {
WrappedArray<Row> rowWrappedArray = (WrappedArray<Row>) row.get(16);
return JavaConverters.asJavaIterator(rowWrappedArray.iterator());
}
它在第一个groupBy子句中崩溃。原因是在flatMap
之后,Dataset
会丢失其列名(在flatMap
之后调用columns()
会返回一个空的Array
),因此无法对列名进行分组。此外,max()
调用也不起作用,因为"max_col"
也是一个不存在的列名
如何为Dataset
中已经有数据但没有列名的Dataset
提供列名(基本上为已经存在的Dataset
提供架构)?也会接受任何其他解决方案,实现我想要的,能够在某一列上分组,并在另一列上找到最大值
共 (0) 个答案