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 索引数组中

Pyspark 数据框将多列转换为浮点数

如何拆分对象列表以分隔pyspark数据框中的列

Pyspark将JSON对象列拆分为多列

使用 pandas 数据框将坐标字符串拆分为 X 和 Y 列

json文件嵌套列值在pyspark中为null