1

次のコードは、パーケットファイルからSpark DataFrameを読み取り、別のパーケットファイルに書き込みます。新しいParquetファイルにDataFrameを書き込んだ後、ArrayType DataTypeにNULL可能なフィールドが変更されます。 コード:スパークデータフレームの書き込み時にnullフィールドが変更される

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. 

で、NULL可能です

+0

何か強い理由はありますか?列が自動的にnullableに変換されない場合、これらの互換性の問題は何ですか? – Naresh

+0

私は本当にその答えを知らない。しかし、私はそれがDataframeの出力方法と関連していると思います。 – chanllen

関連する問題