Следующий код считывает Spark DataFrame из файла паркета и записывает в другой файл паркета. Nullable, поданный в ArrayType DataType, изменяется после записи DataFrame в новый файл Parquet. Код:Неверное поле изменяется при записи Spark Dataframe
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());
Выход: ArrayType (IntegerType, ложь) ArrayType (IntegerType, правда)
Спарк версия: 1.6.2
Есть ли веская причина для этого? Как и в каких проблемах с совместимостью, если столбцы автоматически не преобразуются в значение NULL? – Naresh
Я действительно не знаю ответа. Но я думаю, что это связано с тем, как выводить Dataframe. – chanllen