Для обработки данных, которые у меня есть, я извлекаю схему раньше, поэтому, когда я читаю набор данных, я предоставляю схему вместо того, чтобы пройти дорогостоящий шаг вывода схемы.Сочетание схемы 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, но я не могу найти правильный метод для решения этой проблемы. Есть идеи?
EDIT:
Конечной целью будет кормить в final_schema
к sqlContext.read.schema
и читать RDD из JSON строки, используя метод read
.