1

다음 코드는 쪽모락 파일에서 Spark DataFrame을 읽고 다른 쪽모이도 파일에 씁니다. ArrayType DataType에 Nullable 필드가 새 Parquet 파일에 DataFrame을 작성한 후에 변경됩니다. 코드 :스파크 데이터 프레임을 쓸 때 Nullable 필드가 변경됩니다.

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, TRUE)

스파크 버전은 다음과 같습니다 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

관련 문제