спарк разбирать поле json и сопоставлять с другим классом дел - PullRequest
0 голосов
/ 02 октября 2018

У меня есть несколько json, как показано ниже, когда я загружал этот json, некоторые поля - это строка json,

Как проанализировать этот json, используя искровую скалу, и найти ключевые слова, которые я ищу в этом json

{"main":"{\"payload\": { \"mode\": [\"Node\"], \"currentSatate\": \"Ready\", \"Previousstate\": \"slow\", \"trigger\": [\"11\", \"12\"], \"AllStates\": [\"Ready\", \"slow\", \"fast\", \"new\"],\"UnusedStates\": [\"slow\", \"new\"],\"Percentage\": \"70\",\"trigger\": [\"11\"]}"}

{"main":"{\"payload\": {\"trigger\": [\"11\", \"22\"],\"mode\": [\"None\"],\"cangeState\": \"Open\"}}"}

{"main":"{\"payload\": { \"trigger\": [\"23\", \"45\"], \"mode\": [\"Edge\"], \"node.postions\": [\"12\", \"23\", \"45\", \"67\"], \"node.names\": [\"aa\", \"bb\", \"cc\", \"dd\"]}}" }

Вот как это выглядит после загрузки в фрейм данных

val df = spark.read.json("<pathtojson")
df.show(false)

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|main                                                                                                                                                                                                                           |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|{"payload": { "mode": ["Node"], "currentSatate": "Ready", "Previousstate": "slow", "trigger": ["11", "12"], "AllStates": ["Ready", "slow", "fast", "new"],"UnusedStates": ["slow", "new"],"Percentage": "70","trigger": ["11"]}|
|{"payload": {"trigger": ["11", "22"],"mode": ["None"],"cangeState": "Open"}}                                                                                                                                                   |
|{"payload": { "trigger": ["23", "45"], "mode": ["Edge"], "node.postions": ["12", "23", "45", "67"], "node.names": ["aa", "bb", "cc", "dd"]}}                                                                                   |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Поскольку поле json отличается для всех 3 строк json, есть ли способ сопоставить определение 3 случаякласс и совпадение

Я знаю, что сопоставление только одному классу

val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
val parsedJson = mapper.readValue[classname](jsonstring)

существует ли способ создать несколько сопоставляемых классов падежей и сопоставить их с любым конкретным классом?

1 Ответ

0 голосов
/ 02 октября 2018

Вы используете Spark SQL, первое, что вам нужно сделать, это превратить его в набор данных, а затем использовать методы spark для их обработки.Не используйте Json повсюду (например, как в Play).Первая задача - превратить его в набор данных.

Вы можете превратить сериализацию Json в класс дел:

val jsonFilePath: String = "/whatever/data.json" 
val myDataSet = sparkSession.read.json(jsonFilePath).as[StudentRecord]

Тогда у вас есть набор данных для StudentRecord.Таким образом, теперь вы можете использовать метод groupBy искры, чтобы получить данные нужного столбца из набора данных:

myDataSet.groupBy("whateverTable.whateverColumn").max() //could be min(), count(), etc...

Дополнительное примечание : Ваш Json, должен "очистить" немного.Например, если это в вашей программе, вы можете использовать многострочный способ объявления вашего Json, и тогда вам не нужно будет использовать escape-символ везде:

val myJson: String =
  """
    {
    }
  """.stripMargin

Если он находится вфайл, то Json вы написали не правильно.Итак, сначала убедитесь, что у вас есть синтаксически правильный Json для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...