私が行っているマップ操作のために、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 の代わりに、次のように記述する必要があることを理解しています。
Encoder<Row> encoder = new Encoder<Row>() {
@Override
public StructType schema() {
return join.schema();
//return null;
}
@Override
public ClassTag<Row> clsTag() {
return null;
}
};
ただし、エンコーダーの clsTag() を理解していないため、似たようなもの (つまり、行型のエンコーダー) をデモできる実行例を見つけようとしています。
編集 - これは、言及された質問のコピーではありません:回答がSpark 2.xでSpark 1.xを使用することについて話しているため、データフレーム行を更新された行にマップしようとしているときにエンコーダーエラーが発生しました(私はそうしていません)、また私は探していますエラーを解決するのではなく、Row クラスのエンコーダーに対して。最後に、Scala ではなく Java で解決策を探していました。