Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PySpark-将JSON对象列表转换为行_Pyspark_Pyspark Sql - Fatal编程技术网

PySpark-将JSON对象列表转换为行

PySpark-将JSON对象列表转换为行,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我想转换对象列表并将其属性存储为列 { "heading": 1, "columns": [ { "col1": "a", "col2": "b", "col3": "c" }, { "col1": "d", "col2": "e", "col3": "f" } ] } 最终结果 heading | col1 | col2 | col3 1 | a | b

我想转换对象列表并将其属性存储为列

{
  "heading": 1,
  "columns": [
    {
      "col1": "a",
      "col2": "b",
      "col3": "c"
    },
    {
      "col1": "d",
      "col2": "e",
      "col3": "f"
    }
  ]
}
最终结果

heading | col1 | col2 | col3
1       | a    | b    | c
1       | d    | e    | f
我目前正在展平我的数据(不包括列)


但是,对于这个用例,我需要列。我看到了使用
array\u-zip
explode
的示例。我是否需要遍历每个对象,或者是否有更简单的方法提取每个对象并转换为一行?

使用Spark SQL内置函数:或者可能是处理此问题的最简单方法(当
列中允许NULL时,使用inline\u outer):

从Apache Hive:

将结构数组分解为多行。返回一个包含N列(N=结构中顶级元素的数量)的行集,数组中每个结构一行。(从蜂巢0.10开始)


列的数据类型是什么<代码>字符串
或结构数组
?列是结构数组(属性为字符串)
df = target_table.relationalize('roottable', temp_path)
df.selectExpr('heading', 'inline_outer(columns)').show()                                                           
+-------+----+----+----+
|heading|col1|col2|col3|
+-------+----+----+----+
|      1|   a|   b|   c|
|      1|   d|   e|   f|
+-------+----+----+----+