一部のデータを処理するために Apache Pig を使用しています。
私のデータセットには、特殊文字を含むいくつかの文字列があります(#,{}[])
。
このプログラミング豚の本には、これらの文字をエスケープできないと書かれています。
では、特殊文字を削除せずにデータを処理するにはどうすればよいでしょうか?
交換も考えましたが、避けたいです。
ありがとう
一部のデータを処理するために Apache Pig を使用しています。
私のデータセットには、特殊文字を含むいくつかの文字列があります(#,{}[])
。
このプログラミング豚の本には、これらの文字をエスケープできないと書かれています。
では、特殊文字を削除せずにデータを処理するにはどうすればよいでしょうか?
交換も考えましたが、避けたいです。
ありがとう
データを読み込んでみましたか?これらの文字がタプル、バッグ、またはマップの値の一部である場合、これらの文字をエスケープする方法はありませんが、文字列の一部である場合にこれらの文字をロードすることには何の問題もありません。そのフィールドを type として指定するだけchararray
です。
ここで注意しなければならない唯一の問題は、Pig がフィールド区切り文字として使用している文字が文字列に含まれている場合です。たとえば、USING PigStorage(',')
文字列にカンマが含まれている場合です。しかし、フィールドをマップとして解析するように Pig に指示しない限り、#
、[
、および]
は問題なく処理されます。
ローダー関数を記述するときは、たとえばマップを含むタプルを文字列として返すのではなく (したがって、後でUtf8StorageConverterに依存してマップへの変換を正しく行う必要があります):
Tuple tuple = tupleFactory.newTuple( 1 );
tuple.set(0, new DataByteArray("[age#22, name#joel]"));
Java マップを作成して直接設定できます。
HashMap<String, Object> map = new HashMap<String, Object>(2);
map.put("age", 22);
map.put("name", "joel");
tuple.set(0, map);
これは、ロード中に解析を行う必要がある場合に特に便利です。