今のところローカル モードで Pig 0.11.1 を使用し、CSV からデータをロードしています。
ここまでで、データ セットを読み込んで、必要な計算を実行することができました。次のステップは、データからいくつかのサンプルを取得し、同じ計算を実行することです。既存のプロセスを複製するために、15 分ごとにデータ ポイントを取得します。
ここで問題が発生します。データ ポイントが正確に 15 分間隔である場合に一致するフィルターを Pig で作成できますが、15 分境界に近いデータ ポイントを取得するにはどうすればよいでしょうか?
15 分のマークを見て、そこにあるレコードを取得する必要があります。そのマークのすぐ上にレコードがない場合 (ほとんどの場合)、マークの後の次のレコードを取得する必要があります。
独自のフィルター UDF を作成する必要があると思いますが、UDF はステートフルである必要があるようです。これにより、時間間隔の後に最初の一致が見つかったことがわかるようになります。ステートフルな UDF の例を見つけることができませんでした。最終的に Hadoop に対して実行されたときにデータがどのようにマップ/縮小されるかがわからないことを考えると、おそらく悪い考えだと言えます。
キー/タイムスタンプの値を保存し、それらを解析する Python スクリプトを作成することで、いくつかの手順でこれを行うことができます。ただし、このプロセスをできる限り Pig に保持したいと考えています。
編集:最も基本的なデータは次のようなものです: {id:long, timestamp:long}
. 単位はtimestamp
ミリ秒です。データの各セットは でソートされtimestamp
ます。レコード X が最小値 (開始時間) から 15 分の境界に正確に収まる場合はtimestamp
、それを取得します。それ以外の場合は、その 15 分の境界の後で、いつでも次のレコードを取得します。手でデータを並べ替える時間がなかったため、期待される結果がどのようなものかを示す良い例がありません。