Поля Json сортируются по умолчанию при преобразовании в Spark DataFrame

Когда я создаю фрейм данных из файла json, поля из файла json по умолчанию сортируются в фрейме данных. Как избежать такой сортировки?
Jsonfile с одним сообщением json на строку:

{"name":"john","age":10,"class":2} {"name":"rambo","age":11,"class":3}

Когда я создаю фрейм данных из этого файла как:
val jDF = sqlContext.read.json("/user/inputfiles/sample.json")

DF создается как
jDF: org.apache.spark.sql.DataFrame = [age: bigint, class: bigint, name: string]. В DF поля по умолчанию отсортированы.
Как этого избежать?


Я не могу понять, что здесь не так.

Благодарим за любую помощь в решении проблемы.


person SrinR    schedule 20.06.2016    source источник
comment
Задайте один вопрос на каждый вопрос.   -  person T.J. Crowder    schedule 20.06.2016
comment
Вы говорите, что DF имеет свойства в другом порядке, чем JSON, но объекты JSON представляют собой неупорядоченную коллекцию полей; ссылка. {"a":1,"b":2} и {"b":2,"a":1} - это одно и то же. Таким образом, в JSON нет порядка, на который DF должен обращать внимание. (Ничего не знаю о DF, поэтому не знаю, есть ли у них порядок.)   -  person T.J. Crowder    schedule 20.06.2016
comment
Спасибо за ответ @ T.J. Crowder. Мне нужно создать таблицу с порядком столбцов в той же последовательности, что и в исходном json. Итак, сортировка свойств json в фрейме данных меня беспокоит.   -  person SrinR    schedule 20.06.2016
comment
Я понимаю. Но опять же: объекты JSON не имеют порядка. Даже если вы получаете их в определенном порядке в тексте JSON прямо сейчас, нет гарантии, что все, что их генерирует, не изменит этот порядок внезапно (даже между второстепенными выпусками сериализатора JSON это использует). Итак, данное вам требование не имеет смысла. Вам нужно изменить канал JSON, чтобы вместо этого отправлять вам массив.   -  person T.J. Crowder    schedule 20.06.2016


Ответы (1)


По вопросу 1:

Простой способ - сделать select на DataFrame:

val newDF = jDF.select("name","age","class")

Порядок параметров - это порядок столбцов, который вам нужен.

Но это может быть многословным, если столбцов много, и вам придется определять порядок самостоятельно.

person Yuan JI    schedule 20.06.2016