我要转换对象列表并将其属性存储为列。
{
"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
我目前正在整理数据(并且不包括column列)
df = target_table.relationalize('roottable', temp_path)
但是,对于此用例,我将需要columns列。我看到了使用arrays_zip
和explode
的示例。我需要遍历每个对象,还是有一种更简单的方法来提取每个对象并转换为行?
答案 0 :(得分:1)
使用Spark SQL内置函数:inline或inline_outer可能是处理此问题的最简单方法(在columns
中允许NULL时使用inline_outer):
来自Apache Hive document:
将结构数组分解为多行。返回具有N列的行集(N =结构中顶级元素的数量),数组中每个结构一行一行。 (从Hive 0.10开始。)
df.selectExpr('heading', 'inline_outer(columns)').show()
+-------+----+----+----+
|heading|col1|col2|col3|
+-------+----+----+----+
| 1| a| b| c|
| 1| d| e| f|
+-------+----+----+----+