explode_outer разбивает столбец на 2 строки, если один из параметров json содержит значение с \ n - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь запустить блокнот spark, в котором пытаюсь обработать файл json с массивом json в одном из столбцов с именем «data»:

[{"payload":"here to check 1.\n checking again 1", "key1": " value1"},
 {"payload":"here to check 2.\n checking again 2", "key1": " value2"}]

Я использую explode_outer() дляразбить столбец «данные» на разные строки, где каждый JSON в массиве составляет 1 строку.Поэтому я ожидаю 2 строки в качестве результата.
Проблема в том, что вместо 2 строк я получаю 4 строки.Кажется, он разделен на "\n" в параметре «полезной нагрузки» json.Кто-нибудь может подсказать мне, как это исправить?
Например: JSON:

{"alldata" : [{"payload":"here to check 1.\n checking again 1", "key1": " value1"},
{"payload":"here to check 2.\n checking again 2", "key1": " value2"}], "alldata1": "any"}

код:

    var load =  spark.read.schema(schema).json(path);
      var queryValTemp = load.select(
            col("alldata1"),
       explode_outer(col("alldata")).as("explode_data")
            );
        queryValTemp.show();

1 Ответ

0 голосов
/ 29 апреля 2019

Из того, что я обнаружил, если есть \ n в столбце с json; вызов explode_outer () разделит один столбец на 2 строки вместо 1. Единственный способ решить эту проблему - перед вызовом explode_outer ():

  • вызовите to_json () для столбца
  • replaceAll () для удаления \ n.
  • вызов метода from_json () для результата replaceAll.
...