내가 가지고있는 데이터를 처리하기 전에 스키마를 추출하기 때문에 데이터 집합을 읽을 때 스키마를 추정하는 비싼 단계를 거치지 않고 스키마를 제공합니다. 스키마를 구축하기 위해중복되지 않은 Spark 스키마 결합?
, 나는 최종 스키마로 여러 가지 다른 스키마에 병합해야, 그래서 나는 union (++)
및 distinct
방법을 사용하여왔다,하지만 난 org.apache.spark.sql.AnalysisException: Duplicate column(s)
예외를 점점 계속.
val schema1 = StructType(StructField("A", StructType(
StructField("i", StringType, true) :: Nil
), true) :: Nil)
val schema2 = StructType(StructField("A", StructType(
StructField("i", StringType, true) :: Nil
), true) :: Nil)
val schema3 = StructType(StructField("A", StructType(
StructField("i", StringType, true) ::
StructField("ii", StringType, true) :: Nil
), true) :: Nil)
val final_schema = (schema1 ++ schema2 ++ schema3).distinct
println(final_schema)
출력 :
StructType(
StructField(A,StructType(
StructField(i,StringType,true)),true),
StructField(A,StructType(
StructField(i,StringType,true),
StructField(ii,StringType,true)),true))
내가 정확히 다른 스키마와 일치에만 스키마 구조에 의해 필터링 얻을 것이라는 점을 이해 예를 들어
, 우리는 다음과 같은 구조에서 두 스키마가 있다고 가정 해distinct
. 그러나 결과는 다음과 같아야합니다.
StructType(
StructField(A,StructType(
StructField(i,StringType,true),
StructField(ii,StringType,true)),true))
모든 것이 하나의 스키마에 "결합"됩니다. 나는 scala documentation에있는 모든 방법들을 살펴 보았지만 이것을 해결할 올바른 방법을 찾을 수없는 것 같습니다. 어떤 아이디어?
편집 :
최종 목표는 sqlContext.read.schema
에 final_schema
에 공급하고 read
방법을 사용하여 JSON 문자열의 RDD을 읽을 수있을 것입니다. 이 같은