1

Следующий код считывает 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

ответ

2

Как сейчас, Спарк 2.0 или перед всеми столбцы, написанные от искры SQL являются обнуляемыми, Это из официального руководства

Parquet is a columnar format that is supported by many other data processing systems. Spark SQL provides support for both reading and writing Parquet files that automatically preserves the schema of the original data. When writing Parquet files, all columns are automatically converted to be nullable for compatibility reasons. 

https://github.com/apache/spark/blob/master/docs/sql-programming-guide.md

+0

Есть ли веская причина для этого? Как и в каких проблемах с совместимостью, если столбцы автоматически не преобразуются в значение NULL? – Naresh

+0

Я действительно не знаю ответа. Но я думаю, что это связано с тем, как выводить Dataframe. – chanllen