2016-09-02 5 views
-1

JavaRDDクラスを使用してusernamecount(各ユーザーが各イベントを何回実行したか)を抽出します。私はJavaRDDオブジェクトの作り方を知らない。ここでグループでカウントを抽出するためのJavaRDDクラスの使い方は?

は私のデータからスナップショットです:

{ 
    "_id" : ObjectId("57b3e6d1cab823158a06cafe"), 
    "app" : { 
      "clientIp" : "111.0.0.1", 
      "event" : { 
        "event_name" : "MAX_SEARCH", 
        "appId" : 1, 
        "userName" : "Alex" 
        } 
       } 
} 

と期待される結果:

Alex MAX_SEARCH 5 

私はこれをどのように行うことができますか?

答えて

1

テキストファイルに複数のレコードがあり、ユーザー名、イベント名、およびイベント数を取得したいと考えています。

{ 
    "_id": ObjectId("57b3e6d1cab823158a06cafe"), 
    "app": { 
    "clientIp": "111.0.0.1", 
    "event": { 
     "event_name": "MAX_SEARCH", 
     "appId": 1, 
     "userName": "Alex" 
    } 
    } 
}, 
{ 
    "_id": ObjectId("57b3e6d1cab823158a06cafe"), 
    "app": { 
    "clientIp": "111.0.0.1", 
    "event": { 
     "event_name": "MAX_SEARCH", 
     "appId": 1, 
     "userName": "Alex" 
    } 
    } 
} 
{ 
    "_id": ObjectId("57b3e6d1cab823158a01cafe"), 
    "app": {`enter code here` 
    "clientIp": "111.0.0.1", 
    "event": { 
     "event_name": "MAX_SEARCH", 
     "appId": 1, 
     "userName": "Hokam" 
    } 
    } 
}, 
{ 
    "_id": ObjectId("57b3e6d1cab823158a02cafe"), 
    "app": { 
    "clientIp": "111.0.0.1", 
    "event": { 
     "event_name": "MIN_SEARCH", 
     "appId": 1, 
     "userName": "Hokam" 
    } 
    } 
} 

以下のコードスニペットは、作成それからRDDと期待される結果を生成し、上記のファイルからデータを読み取るために役立ちます。

import net.minidev.json.JSONObject; 
import net.minidev.json.JSONValue; 
SparkConf conf = new SparkConf().setAppName("UserEventLogger").setMaster("local[2]"); 
JavaSparkContext sc = new JavaSparkContext(conf); 

String fileData = FileUtils.readFileToString(new File("/data/pocs/text-file.json")); 
List<JSONObject> jsonObject = (List<JSONObject>) JSONValue.parse("[" + fileData + "]"); 

JavaRDD<JSONObject> jsonRdd = sc.parallelize(jsonObject); 

jsonRdd.mapToPair(new PairFunction<JSONObject, String, Integer>() { 

    @Override 
    public Tuple2<String, Integer> call(JSONObject appObj) throws Exception { 
     JSONObject app = (JSONObject) appObj.get("app"); 
     JSONObject event = ((JSONObject) app.get("event")); 
     String username = event.getAsString("userName"); 
     String eventName = event.getAsString("event_name"); 

     return new Tuple2<String, Integer>(username + " " + eventName, 1); 
    } 
}).reduceByKey(new Function2<Integer, Integer, Integer>() { 

    @Override 
    public Integer call(Integer v1, Integer v2) throws Exception { 
     return v1 + v2; 
    } 
}).foreach(new VoidFunction<Tuple2<String, Integer>>() { 

    @Override 
    public void call(Tuple2<String, Integer> t) throws Exception { 
     System.out.println(t._1 + " " + t._2); 

    } 
}); 

sc.stop(); 

あなたは上記のコードを実行した後では、次の出力が表示されますスニペット:

Hokam MAX_SEARCH 1 
Alex MAX_SEARCH 2 
Hokam MIN_SEARCH 1 
+0

ありがとうございました@hokum –

関連する問題