Encoder für Zeile Typ Spark-Datasets
Möchte ich schreiben, ist ein encoder für einen Zeile geben Sie im DataSet, für eine map-operation, die ich mache. Im wesentlichen, ich verstehe nicht, wie man schreiben Encoder.
Unten ist ein Beispiel für eine map-operation:
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());
Ich verstehen, dass statt eines string-Encoder muss wie folgt geschrieben werden:
Encoder<Row> encoder = new Encoder<Row>() {
@Override
public StructType schema() {
return join.schema();
//return null;
}
@Override
public ClassTag<Row> clsTag() {
return null;
}
};
Allerdings verstehe ich nicht die clsTag() in the encoder, und ich bin auf der Suche nach einem ausgeführten Beispiel kann demostrate etwas ähnliches (d.h. ein encoder für einen row-Typ)
Bearbeiten - Dies ist nicht eine Kopie der Frage erwähnt : Encoder-Fehler beim anzeigen dataframe Zeile zu Zeile aktualisiert als Antwort, spricht über die Verwendung von Spark-1.x Spark 2.x (ich bin nicht dabei), auch ich bin auf der Suche nach einem encoder für eine Zeile der Klasse eher als das beheben eines Fehlers. Schließlich war ich auf der Suche nach einer Lösung in Java, nicht in der Scala.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist die Verwendung eine RowEncoder und das schema des datasets mit StructType.
Unten ist ein Beispiel für eine flatmap-operation mit Datasets:
Ich hatte das gleiche problem...
Encoders.kryo(Row.class))
für mich gearbeitet.Als bonus, das Apache Spark tuning docs finden Kryo, da es schneller an-Serialisierung "oft so viel wie 10x":
https://spark.apache.org/docs/latest/tuning.html