我有多个json来自任何restapi,我不知道它的模式。我无法使用dataframes的explode函数,因为我不知道由sparkapi创建的列名。
1.我们可以通过解码 dataframe.schema.fields
,因为spark只提供dataframe行中的值部分,并将顶级键作为列名。
Dataframe--
+--------------------+
| stackoverflow|
+--------------------+
|[[[Martin Odersky...|
+--------------------+
通过在运行时确定模式,使用dataframe方法是否有最佳的方法来展平json。
示例json-:
{
"stackoverflow": [{
"tag": {
"id": 1,
"name": "scala",
"author": "Martin Odersky",
"frameworks": [
{
"id": 1,
"name": "Play Framework"
},
{
"id": 2,
"name": "Akka Framework"
}
]
}
},
{
"tag": {
"id": 2,
"name": "java",
"author": "James Gosling",
"frameworks": [
{
"id": 1,
"name": "Apache Tomcat"
},
{
"id": 2,
"name": "Spring Boot"
}
]
}
}
]
}
注意-我们需要在dataframe中执行所有操作,因为有大量的数据,即将到来,我们无法解析每个json。
1条答案
按热度按时间rjzwgtxy1#
注意:下面的逻辑可能不适用于
spark structured streaming
直接。创建了helper函数&您可以直接调用
df.explodeColumns
在Dataframe上。下面的代码将展平多级数组和结构类型列。
扁平柱