PySpark 数据帧转换 - 从 JSON 中获取价值部分
PySpark dataframe transformation - to get value part from JSON
我有一个如下所示的数据框,其中包含键值对。
| Name | Age | Location
| abc | 12 | loc1
| def | 13 | loc2
我想用它创建一个 json 字符串。当我执行 .toJSON()
并收集时,我从该数据帧
中获取以下 json 字符串
[{"name":"abc","age":12,"location":"loc1"},{"name":"def","age":13,"location":"loc2"}]
是否可以只获取 json 的值部分而不是像下面这样获取键?
预期输出:
[{"abc",12,"loc1"},{"def",13,"loc2"}]
我用来将数据帧转换为 json
的代码
df.toJSON().collect()
如果我们能在 PYSPARK 中得到一些解决方案就太好了。
您期望的结果不是有效的 JSON,因此您不能在数据帧或 to_json
函数上使用 toJSON()
。
您可以尝试使用 format_string
函数来获取您想要的结构:
from pyspark.sql import functions as F
result = df.groupBy().agg(
F.collect_list(
F.format_string('{"%s", %s, "%s"}', *df.columns)
).alias("records")
).first()["records"]
print(result)
# ['{"abc", 12, "loc1"}', '{"def", 13, "loc2"}']
我有一个如下所示的数据框,其中包含键值对。
| Name | Age | Location
| abc | 12 | loc1
| def | 13 | loc2
我想用它创建一个 json 字符串。当我执行 .toJSON()
并收集时,我从该数据帧
[{"name":"abc","age":12,"location":"loc1"},{"name":"def","age":13,"location":"loc2"}]
是否可以只获取 json 的值部分而不是像下面这样获取键?
预期输出:
[{"abc",12,"loc1"},{"def",13,"loc2"}]
我用来将数据帧转换为 json
的代码df.toJSON().collect()
如果我们能在 PYSPARK 中得到一些解决方案就太好了。
您期望的结果不是有效的 JSON,因此您不能在数据帧或 to_json
函数上使用 toJSON()
。
您可以尝试使用 format_string
函数来获取您想要的结构:
from pyspark.sql import functions as F
result = df.groupBy().agg(
F.collect_list(
F.format_string('{"%s", %s, "%s"}', *df.columns)
).alias("records")
).first()["records"]
print(result)
# ['{"abc", 12, "loc1"}', '{"def", 13, "loc2"}']