次のようなデータがあります。
(000001, mfp=621|mdus=4.0|mduc=5.0|mas=1|mpc=4.0|mfn=1|country=ABC)
(00002, address=1000+mity|mus=1|name=kailtig+bksyt|mas=1|mpc=4.977552|country=ABC)
フィールドは識別子と属性のセットです。
データ内のすべての属性を入力し、それらに対していくつかの操作を実行しようとしています。
そのため、次のようにスクリプトを準備しました。
A = load 'myData.txt' using PigStorage(',') as (ID, ATTRIBUTES);
B = foreach A generate FLATTEN(STRSPLIT(ATTRIBUTES, '\\|')) ;
C = foreach B generate FLATTEN(TOBAG(*));
Dump C;
()
( mfp=621)
(mdus=4.0)
(mduc=5.0)
(mas=1)
(mpc=4.0)
(mfn=1)
(country=ABC))
( address=1000+mity)
(mus=1)
(name=kailtig+bksyt)
(mpc=4.977552)
この時点まで、問題なく動作しています。しかし、問題はここから始まります。
これらの属性に対していくつかの操作を実行しようとすると、たとえば「m」を「market」に置き換えます
D = foreach C generate REPLACE($0,'m','market');
次のようなエラーが表示されます。
Could not infer the matching function for org.apache.pig.builtin.REPLACE as
multiple or none of them fit. Please use an explicit cast.
bytearray を chararray にキャストしようとすると
D = foreach C generate (chararray)$0;
次のようなエラーが表示されます:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1052:
<line 4, column 24> Cannot cast bytearray to chararray
ただし、次のリンクhttp://pig.apache.org/docs/r0.11.1/basic.html#castは、piglatin が bytearray から chararray へのキャストをサポートしていることを示しています。
どうすればこの問題を解決できますか。助けてください。
ありがとう。