如果 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()。
我正在尝试执行一个 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()。