コンテンツをテキスト ファイルに保存して終了する Pig スクリプトを作成します。
STORE foo into 'outputLocation';
まったく別の作業中に、このファイルの行を読み取り、それらを解析してタプルに戻したいと考えています。foo のデータには、 { } ( ) などの Pig バッグ/タプルを保存するときに使用される文字を含む chararray が含まれている可能性があります。以前に保存したファイルは、次のようなコードを使用して読み取ることができます。
FileSystem fs = FileSystem.get(UDFContext.getUDFContext().getJobConf());
FileStatus[] fileStatuses = fs.listStatus(new Path("outputLocation"));
for (FileStatus fileStatus : fileStatuses) {
if (fileStatus.getPath().getName().contains("part")) {
DataInputStream in = fs.open(fileStatus.getPath());
String line;
while ((line = in.readLine()) != null) {
// Do stuff
}
}
}
さて// Do stuff
、文字列を解析してタプルに戻したいと思います。これは可能ですか / Pig は API を提供しますか? 一番近いのは StorageUtil クラスの textToTuple 関数ですが、これは 1 つの DataByteArray を含む Tuple を作成するだけです。元のフィールドを簡単に再取得できるように、元のように他のバッグ、タプル、文字配列を含むタプルが必要です。それが役立つ場合は、元のファイルを保存する StoreFunc を変更できます。