Spark - JSON пустой массив строк отображается как строка - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь загрузить данные нескольких файлов JSON в HIVE, используя spark-shell и Scala.

 import org.apache.spark.SparkConf
 import org.apache.spark.sql.SQLContext

 val conf = new SparkConf().setAppName("App").setMaster("local")

 import org.apache.spark.sql.hive._

 val hiveContext = new HiveContext(sc)

 val df = hiveContext.read.schema(buildSchema()).json(<path to json>)
 df.printSchema()
 df.show()

 df.write.mode("append").saveAsTable("data")

Проблема заключается в том, что некоторые поля в моих файлах json являются Array of Strings.Если у любого данного файла есть хотя бы одна запись с полем «Массив строк» ​​с некоторым допустимым значением, то результирующий фрейм данных имеет правильный тип данных (т. Е. Массив строк) для указанного поля, но если все записи в данном файле json пустыезначение в полях Array of Strings, тогда запись записывается как тип String в кадре данных.И когда в конечном итоге данные должны быть добавлены из фрейма данных в таблицу HIVE, записи отклоняются из-за несоответствия типов данных.Как я могу гарантировать, что этого несоответствия типов данных избежать и независимо от какого-либо значения или нет в указанном поле, его тип данных читается как массив строк (возможно, с нулевым значением, если массив пуст)?

1 Ответ

0 голосов
/ 21 мая 2018

Попробуйте приведенный ниже код, я выполняю приведение к Array[String] и работаю с данными моего образца.

df.select(df("Your_Column_Name").cast(ArrayType(StringType))).write.mode("append").saveAsTable("data")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...