2017-12-07 17 views
0

私はSparkを初めて使用しています。 私がしたいのは、入れ子にされたjsonsを読んで、特定の条件に基づいてそれらをグループ化することです。 例:jsonに、都市と郵便番号のような人物の詳細が含まれている場合。私は同じ都市と郵便番号に属する人々をグループ化したいと思うでしょう。集約されたJSONを集計する方法

私はDataSetにjsonsを読むまで進んでいます。 しかし、それらをグループ化する方法はわかりません。

マイネストされたJSON形式は、これは私がファイルからネストされたJSONを読むために書かれているコードです

{ 
    "entity": { 
    "name": "SJ", 
    "id": 31 
    }, 
    "hierarchy": { 
    "state": "TN", 
    "city": "CBE" 
    }, 
    "data": {}} 

です。

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()); 
    } 

} 

答えて

2

TL; DR使用spark.read.json(あなたが行ったように)selectにオペレータを "フラット化" が続きます。

(私はスカラ座を使用し、ご自宅の練習:)としての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) 

のはentityhierarchyトップレベルの列を平らにしてみましょう。

scala> entities.select("entity.*", "hierarchy.*").show 
+---+----+----+-----+ 
| id|name|city|state| 
+---+----+----+-----+ 
| 31| SJ| CBE| TN| 
+---+----+----+-----+ 

集約は今すぐ簡単ではありません。

関連する問題