如果 json 参数之一的值中包含“\n”,则 explode_outer 将列拆分为 2 行

explode_outer splits the column into 2 rows if one of the json parameter has value with "\n" in it

我正在尝试执行一个 spark notebook,在其中我正在尝试处理 json 文件,该文件在名为 "data" 的列之一中具有 json 数组:

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

我使用 explode_outer() 将列 "data" 拆分为不同的行,其中数组中的每个 json 构成 1 行。所以我希望得到 2 行结果。
问题是我得到 4 行而不是 2 行。它似乎在 json 的 "payload" 参数中的 "\n" 上拆分。有人可以指导我如何解决这个问题吗?
例如: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();

根据我的发现,如果在 json 的列中有 \n;调用 explode_outer() 会将一列拆分为 2 行而不是 1 行。解决此问题的唯一方法是在调用 explode_outer():

之前
  • 在列上调用 to_json()
  • replaceAll() 用于删除 \n。
  • 对 replaceAll 的结果调用 from_json()。