Scala Искра объединяет набор столбцов в кадре данных в строку JSON - PullRequest
0 голосов
/ 20 февраля 2020

С учетом фрейма данных,

+-----------------------------+
| id|  name| payable| strategy|
+-----------------------------+
|  0|   Joe|     100|     st-1|
|  1|   Tom|     200|     st-2|
|  2|  John|     300|     st-1|
+-----------------------------+

Каков наиболее эффективный способ преобразования каждой строки в JSON строку, например,

{
  "payload": {
     "name": "Joe",
     "payments": [
         {
            "strategy": "st-1",
            "payable": 100
         }
     ]
  }
}

В настоящее время у меня есть UDF, чтобы вручную привести в соответствие предоставленные столбцы, но мне интересно, есть ли лучший способ добиться этого. Метод to_ json - лучшая альтернатива, которую я нашел до сих пор, но в качестве входных данных используется только один столбец.

1 Ответ

3 голосов
/ 20 февраля 2020

Использование to_json() является правильным подходом, но содержимое должно быть передано как struct в зависимости от ситуации:

val df = Seq((0,"Joe",100,"st-1"), (1,"Tom",200,"st-2")).toDF("id","name","payable","strategy")

val result = df.select(
  to_json(struct(
    struct($"name",
      array(struct($"strategy",$"payable")) as "payments"
    ) as "payload")
  ) as "jsonValue"
 )

result.show(false)
+-------------------------------------------------------------------------+
|jsonValue                                                                |
+-------------------------------------------------------------------------+
|{"payload":{"name":"Joe","payments":[{"strategy":"st-1","payable":100}]}}|
|{"payload":{"name":"Tom","payments":[{"strategy":"st-2","payable":200}]}}|
+-------------------------------------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...