[英]How to read nested JSONs for aggregations?
我是Spark的新手。 我要做的就是读取嵌套的json,并根据特定条件对它们进行分组。 例如:如果json包含一个人的详细信息,例如他的城市和邮政编码。 我想将属于同一城市和邮政编码的人归为一组。
在将jsons读入DataSet之前,我已经取得了进步。 但是我不知道如何将它们分组。
我的嵌套JSON格式为
{
"entity": {
"name": "SJ",
"id": 31
},
"hierarchy": {
"state": "TN",
"city": "CBE"
},
"data": {}}
这是我编写的用于从文件读取嵌套json的代码。
public void groupJsonString(SparkSession spark) {
Dataset<Row> studentRecordDS = spark.read()
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
.json("/home/shiney/Documents/NGA/sparkJsonFiles/*.json");
StructType st = studentRecordDS.schema();
List<StructType> nestedList = new ArrayList<>();
for(StructField field : st.fields()) {
nestedList.add((StructType)field.dataType());
}
}
TL; DR使用spark.read.json
(如您所做的),然后在select
“ flatten”运算符。
(我使用Scala,而将转换为Java作为家庭练习:))
让我们使用您的示例。
$ cat ../datasets/sample.json
{
"entity": {
"name": "SJ",
"id": 31
},
"hierarchy": {
"state": "TN",
"city": "CBE"
},
"data": {}
}
代码可能如下(再次是Scala)。
val entities = spark
.read
.option("multiLine", true)
.json("../datasets/sample.json")
scala> entities.printSchema
root
|-- entity: struct (nullable = true)
| |-- id: long (nullable = true)
| |-- name: string (nullable = true)
|-- hierarchy: struct (nullable = true)
| |-- city: string (nullable = true)
| |-- state: string (nullable = true)
让我们展平entity
和hierarchy
顶级列。
scala> entities.select("entity.*", "hierarchy.*").show
+---+----+----+-----+
| id|name|city|state|
+---+----+----+-----+
| 31| SJ| CBE| TN|
+---+----+----+-----+
聚合现在应该很容易了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.