Как преобразовать Dataset в JavaRDD в java
как преобразовать Data<Row> в javaRDD<User>?
Я пытался вытащить из базы список с большим количеством колон и столкнулся с такой проблемой что мне приходится указывать место каждой колоны и ее значение, как можно получить без всего этого?
Вот мой код
SparkConf sparkConf = new SparkConf()
.setMaster("local[*]")
.setAppName("test");
SparkContext sparkContext = new SparkContext(sparkConf);
SparkSession session = new SparkSession(sparkContext);
DataFrameReader dataFrameReader = session
.read()
.format("jdbc")
.option("url", "jdbc:postgresql://10.100.0.4:5432/refund_service")
.option("driver", "org.postgresql.Driver")
.option("dbtable", "refunds")
.option("user", "smartplaza")
.option("password", "smartplaza");
Encoder<Something> somethingEncoder = Encoders.bean(Refund.class);
Dataset<Row> response = dataFrameReader.load();
JavaRDD<Something> rsomethingJavaRDD = response.javaRDD().map(new Function<Row, Refund>() {
@Override
public Something call(Row row) throws Exception {
return new Something(row.getLong(0),
row.getTimestamp(1), row.getTimestamp(2),row.getTimestamp(3),
row.getDouble(4),
row.getDouble(5),
row.getDouble(6),
row.getLong(7),
row.getLong(8),
row.getDouble(9),
row.getLong(10),
row.getDouble(11),
(Long) row.get(12),
(Long) row.get(13),
(Long) row.get(14),
row.getBoolean(15),
(Long) row.get(16),
(Long) row.get(17),
row.getDouble(18),
row.getDouble(19),
(Long) row.get(20),
(Long)row.get(21));
}
});
Dataset<Something> somethingDataset = session.createDataset(refundJavaRDD.rdd(),somethingEncoder);
Ответы (1 шт):
Автор решения: Alex Ott
→ Ссылка
Надо просто использовать функцию .as(encoder) как описано в документации. Что-то вроде:
Encoder<Refund> refundEncoder = Encoders.bean(Refund.class);
Dataset<Refund> response = dataFrameReader.load().as(refundEncoder);