#java #apache-spark #apache-spark-sql
Вопрос:
У меня есть следующий код:
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
теряет свои имена столбцов (вызов columns()
после flatMap
возвращает пустое Array
) и, таким образом, группировка по имени столбца становится невозможной. Кроме того, max()
вызов также не будет работать, потому "max_col"
что это также несуществующее имя столбца.
Как я могу предоставить имена столбцов для файла, в Dataset
котором уже есть данные, но нет имен столбцов (по сути, предоставляя схему для уже существующего Dataset
)? Также приму любое другое решение, которое достигнет того, чего я хочу, — возможность группироваться по определенному столбцу и находить максимум в другом.