Der folgende Code liest einen Spark DataFrame aus einer Parkettdatei und schreibt ihn in eine andere Parkettdatei. Nullable, das in ArrayType DataType abgelegt wurde, wird geändert, nachdem der DataFrame in eine neue Parquet-Datei geschrieben wurde. Code:Feld "Nullable" wird beim Schreiben eines Spark-Datenrahmens geändert
SparkConf sparkConf = new SparkConf();
String master = "local[2]";
sparkConf.setMaster(master);
sparkConf.setAppName("Local Spark Test");
JavaSparkContext sparkContext = new JavaSparkContext(new SparkContext(sparkConf));
SQLContext sqc = new SQLContext(sparkContext);
DataFrame dataFrame = sqc.read().parquet("src/test/resources/users.parquet");
StructField[] fields = dataFrame.schema().fields();
System.out.println(fields[2].dataType());
dataFrame.write().mode(SaveMode.Overwrite).parquet("src/test/resources/users1.parquet");
DataFrame dataFrame1 = sqc.read().parquet("src/test/resources/users1.parquet");
StructField [] fields1 = dataFrame1.schema().fields();
System.out.println(fields1[2].dataType());
Ausgang: arraytype (IntegerType, false) arraytype (IntegerType, true)
Spark-Version ist: 1.6.2
Gibt es einen guten Grund dafür? Wie lauten die Kompatibilitätsprobleme, wenn die Spalten nicht automatisch in Nullwerte umgewandelt werden? – Naresh
Ich kenne die Antwort nicht wirklich. Aber ich denke, es verbindet sich damit, wie man den Dataframe ausgibt. – chanllen