2017-11-07 4 views
2

나는 이미 내가

case class B(name: String, age: Option[Int]) 
에 새로운 비 필수 필드를 추가 할

case class A(name: String) 

로 표시되는 스키마 마루에 저장된 일부 오래된 데이터를

을 입력하고 이전 데이터와 새 데이터를 모두 DataFrame으로 읽습니다. 스레드에서

예외는 "주요"org.apache.spark.sql.AnalysisException : 해결할 수없는 '`age`'나는 spark.read.parquet("test_path").as[B].collect()와 데이터를 읽을려고 할 때마다, 나는 다음과 같은 예외를 받고 있어요 주어진 입력 열 : [이름];

모든 데이터에 대해 이전 버전과 호환되는 스키마를 지정하는 방법이 있습니까? 이전 버전과 호환 스키마 이전 데이터를 읽기 위해서는

답변

0

, 그것은 새로운 Encoder를 지정하는 것만으로는 충분하지, 당신은 수동으로 DataSet에 대한 StructType를 지정해야하고, 스파크 중 하나에 근거를 추론 할 수 없습니다. 이 방법은 DataFrame로 변환하는 동안없는 필드가있을거야되지 않습니다

spark.read.schema(Encoders.product[B].schema).parquet("test").as[B].collect()