最初の 2 つの列がキーになるはずです。TextInputFormat
入力テキスト ファイルを読み取るために使用します。Mapper は、Text オブジェクトを発行する必要がありますcolA_colB
。例えば。データの
1,2,2012-12-22 12:23:30
1,2,2012-12-22 12:23:40
1,2,2012-12-22 12:24:20
2,3,2012-12-22 12:25:30
マッパーは (key, val) を取得します:
<some long integer X1>, "1,2,2012-12-22 12:23:30"
<some long integer X2>, "1,2,2012-12-22 12:23:40"
<some long integer X3>, "1,2,2012-12-22 12:24:20"
<some long integer X4>, "2,3,2012-12-22 12:25:30"
「いくつかの長い整数」は、入力ファイルの行のファイルオフセットに他なりません
Mapper は以下の (キー、値) 型Textのペアを発行する必要があります。
"1_2" , "2012-12-22 12:23:30"
"1_2" , "2012-12-22 12:23:40"
"1_2" , "2012-12-22 12:24:20"
"2_3" , "2012-12-22 12:25:30"
ご覧のとおり、キーは最初の 3 つのレコードで同じであり、それらは確実に同じリデューサーになります。レデューサーはこれを取得します:
"1_2" , ["2012-12-22 12:23:30", "2012-12-22 12:23:40", "2012-12-22 12:24:20"]
"2_3" , ["2012-12-22 12:25:30"]
レデューサーで、Text オブジェクトから String を取得し、それらを解析してJava Dateオブジェクトを生成します。その後、2つの日付の違いを取得するのは簡単です。