#json #scala #apache-spark
Вопрос:
Я пытаюсь прочитать json, пример:
{
"id1": {
"a": "7",
"b": "3",
"c": "10",
"d": "10",
"e": "15",
"f": "11",
"g": "2",
"h": "7",
"i": "5",
"j": "14"
},
"id2": {
"a": "3",
"b": "7",
"c": "12",
"d": "4",
"e": "10",
"f": "4",
"g": "13",
"h": "4",
"i": "1",
"j": "13"
},
"id3": {
"a": "10",
"b": "6",
"c": "1",
"d": "1",
"e": "13",
"f": "12",
"g": "9",
"h": "6",
"i": "7",
"j": "4"
}
}
когда я обрабатываю его с помощью spark.read.json («файл.json»), он возвращает одну запись в этом формате:
----------------------------------- --------------------------------------- ---------------------------------
|id1 |id2 |id3 |
----------------------------------- --------------------------------------- ---------------------------------
|{7, 3, 10, 10, 15, 11, 2, 7, 5, 14}|{322539, 7, 12, 4, 10, 4, 13, 4, 1, 13}|{10, 6, 1, 1, 13, 12, 9, 6, 7, 4}|
----------------------------------- --------------------------------------- ---------------------------------
Я бы хотел, чтобы результат был примерно таким при обработке файла:
----- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
| id | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 |
----- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
| id1 | 7 | 3 | 10 | 10 | 15 | 11 | 2 | 7 | 5 | 14 |
----- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
| id2 | 3 | 7 | 12 | 4 | 10 | 4 | 13 | 4 | 1 | 13 |
----- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
| id3 | 10 | 6 | 1 | 1 | 13 | 12 | 9 | 6 | 7 | 4 |
----- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------
какой-нибудь простой и быстрый способ?
Спасибо
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Вы можете изменить свой входной файл JSON ? Если это так, то создание массива объектов JS выполнит эту работу с помощью spark.read.json() :
[
{
"id": "id1",
"a": "7",
"b": "3",
"c": "10",
"d": "10",
"e": "15",
"f": "11",
"g": "2",
"h": "7",
"i": "5",
"j": "14"
},
...
]
Комментарии:
1. Можете ли вы предоставить код для того, какое решение было бы таким, если предположить, что это изменение было внесено?
2. Я не могу его редактировать, я получаю его вот так, в таком формате.
3. Насколько велик этот файл, который вы читаете с помощью spark? Если он небольшой, то прочитайте его с помощью какой-нибудь библиотеки json, а затем создайте df после его обработки. Если он действительно большой, у вас есть проблема. Кстати, afaik, массив объектов json также не будет работать «Обратите внимание, что файл, предлагаемый в качестве файла json, не является типичным файлом JSON. Каждая строка должна содержать отдельный, автономный допустимый объект JSON. Для получения дополнительной информации, пожалуйста, смотрите текстовый формат строк JSON, также называемый JSON с разделителями новой строки.» (здесь spark.apache.org/docs/latest/sql-data-sources-json.html )