Pyspark 数据框将 json 列值拆分为***多列
Posted
技术标签:
【中文标题】Pyspark 数据框将 json 列值拆分为***多列【英文标题】:Pyspark dataframe split json column values into top-level multiple columns 【发布时间】:2017-03-21 01:14:05 【问题描述】:我有一个 json 列,其中可以包含任何键:值对。我想为这些键:值对创建新的***列。 例如,如果我有这些数据
A B
"\"C\":\"c\" , \"D\":\"d\"..." b
这是我想要的输出
B C D ...
b c d
很少有类似于将列拆分为多列的问题,但在这种情况下没有一个问题有效。任何人都可以请帮忙。提前致谢!
【问题讨论】:
所有 json 列的值是否具有相同的架构或包含数组? json 列的值有不同的模式,包含不同的键:值对。我们可以使用 json.loads 来解析这个列,列值是 json 格式。但我想知道如何在解析此值时创建***列? 【参考方案1】:您正在寻找org.apache.spark.sql.functions.from_json
:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions$@from_json(e:org.apache.spark.sql.Column,schema:String,options:java.util.Map[String,String]):org。 apache.spark.sql.Column
这是与SPARK-17699相关的python代码提交:https://github.com/apache/spark/commit/fe33121a53384811a8e094ab6c05dc85b7c7ca87
来自提交的示例用法:
>>> from pyspark.sql.types import *
>>> data = [(1, '''"a": 1''')]
>>> schema = StructType([StructField("a", IntegerType())])
>>> df = spark.createDataFrame(data, ("key", "value"))
>>> df.select(from_json(df.value, schema).alias("json")).collect()
[Row(json=Row(a=1))]
【讨论】:
谢谢,如何同时添加多个列,因为我有多个键:值对? 试试df.select(from_json(df.value, schema), from_json(df.value2, schema2))
?
这可能与您的问题有关:issues.apache.org/jira/browse/SPARK-19595 - 不幸的是,如果这对您有限制,您将不得不等到 Spark 2.2 或现在创建自定义解决方案。以上是关于Pyspark 数据框将 json 列值拆分为***多列的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 数据帧拆分并将分隔列值填充到 N 索引数组中