【发布时间】:2017-08-31 12:15:42
【问题描述】:
我想为 DataSet 中的 Row 类型编写一个编码器,用于我正在执行的映射操作。本质上,我不明白如何编写编码器。
以下是地图操作的示例:
In the example below, instead of returning Dataset<String>, I would like to return Dataset<Row>
Dataset<String> output = dataset1.flatMap(new FlatMapFunction<Row, String>() {
@Override
public Iterator<String> call(Row row) throws Exception {
ArrayList<String> obj = //some map operation
return obj.iterator();
}
},Encoders.STRING());
我明白编码器不是字符串,需要写成如下:
Encoder<Row> encoder = new Encoder<Row>() {
@Override
public StructType schema() {
return join.schema();
//return null;
}
@Override
public ClassTag<Row> clsTag() {
return null;
}
};
但是,我不了解编码器中的 clsTag(),我正在尝试找到一个可以演示类似内容的运行示例(即行类型的编码器)
编辑 - 这不是提到的问题的副本:Encoder error while trying to map dataframe row to updated row 因为答案谈到在 Spark 2.x 中使用 Spark 1.x(我没有这样做),我也在寻找一个编码器行类而不是解决错误。最后,我一直在寻找 Java 中的解决方案,而不是 Scala。
【问题讨论】:
标签: java apache-spark apache-spark-sql apache-spark-dataset apache-spark-encoders