Я пытался использовать JSON файл как небольшую БД. После создания таблицы шаблонов в DataFrame я запросил его с помощью SQL и получил исключение. Вот мой код:
val df = sqlCtx.read.json("/path/to/user.json")
df.registerTempTable("user_tt")
val info = sqlCtx.sql("SELECT name FROM user_tt")
info.show()
df.printSchema()
результат:
root
|-- _corrupt_record: string (nullable = true)
Мой JSON файл:
{
"id": 1,
"name": "Morty",
"age": 21
}
Exeption:
Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve 'name' given input columns: [_corrupt_record];
Как я могу это исправить?
UPD
_corrupt_record
является
+--------------------+
| _corrupt_record|
+--------------------+
| {|
| "id": 1,|
| "name": "Morty",|
| "age": 21|
| }|
+--------------------+
UPD2
Это странно, но когда я переписываю свой JSON, чтобы сделать его oneliner, все работает нормально.
{"id": 1, "name": "Morty", "age": 21}
Итак, проблема в newline
.
UPD3
Я нашел в документах следующее предложение:
Обратите внимание, что файл, который предлагается в виде json файла, не является типичным файлом JSON. Каждая строка должна содержать отдельный автономный действительный объект JSON. Как следствие, обычный многострочный файл JSON чаще всего терпит неудачу.
Невозможно сохранить JSON в таком формате. Есть ли какое-либо обходное решение, чтобы избавиться от многослойной структуры JSON или преобразовать ее в oneliner?