Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache pig 无法在pig中将bytearray投射到chararray_Apache Pig - Fatal编程技术网

Apache pig 无法在pig中将bytearray投射到chararray

Apache pig 无法在pig中将bytearray投射到chararray,apache-pig,Apache Pig,我的数据如下: (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 FL

我的数据如下:

(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)
 Could not infer the matching function for org.apache.pig.builtin.REPLACE as 
 multiple or none of them fit. Please use an explicit cast.
A: {id: bytearray,attrs: bytearray}
((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))
B: {attr: chararray}
( 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)
(mas=1)
(mpc=4.977552)
(country=ABC))
C: {attrchanged: chararray}
( marketfp=621)
(marketdus=4.0)
(marketduc=5.0)
(marketas=1)
(marketpc=4.0)
(marketfn=1)
(country=ABC))
( address=1000+marketity)
(marketus=1)
(namarkete=kailtig+bksyt)
(marketas=1)
(marketpc=4.977552)
(country=ABC))
字段是标识符和属性集

我试图填充数据中的所有属性,并对它们执行一些操作

因此,我准备了以下脚本:

(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)
 Could not infer the matching function for org.apache.pig.builtin.REPLACE as 
 multiple or none of them fit. Please use an explicit cast.
A: {id: bytearray,attrs: bytearray}
((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))
B: {attr: chararray}
( 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)
(mas=1)
(mpc=4.977552)
(country=ABC))
C: {attrchanged: chararray}
( marketfp=621)
(marketdus=4.0)
(marketduc=5.0)
(marketas=1)
(marketpc=4.0)
(marketfn=1)
(country=ABC))
( address=1000+marketity)
(marketus=1)
(namarkete=kailtig+bksyt)
(marketas=1)
(marketpc=4.977552)
(country=ABC))
到目前为止,一切正常。但是,问题从这里开始

当我尝试对这些属性执行某些操作时,例如,将“m”替换为“market”

D = foreach C generate REPLACE($0,'m','market');
给我一个错误如下:

(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)
 Could not infer the matching function for org.apache.pig.builtin.REPLACE as 
 multiple or none of them fit. Please use an explicit cast.
A: {id: bytearray,attrs: bytearray}
((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))
B: {attr: chararray}
( 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)
(mas=1)
(mpc=4.977552)
(country=ABC))
C: {attrchanged: chararray}
( marketfp=621)
(marketdus=4.0)
(marketduc=5.0)
(marketas=1)
(marketpc=4.0)
(marketfn=1)
(country=ABC))
( address=1000+marketity)
(marketus=1)
(namarkete=kailtig+bksyt)
(marketas=1)
(marketpc=4.977552)
(country=ABC))
当我试着向查拉雷投下拜提雷时

D = foreach C generate (chararray)$0;
给我的错误是:

 ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1052:
 <line 4, column 24> Cannot cast bytearray to chararray
ERROR org.apache.pig.tools.grunt.grunt-错误1052:
无法将bytearray强制转换为chararray
但是,下面的链接说piglatin支持从bytearray到chararray的cast

我怎样才能解决这个问题。请帮忙


谢谢。

我不确定您是否100%需要使用字节数组,但如果不是,您可以使用:

A = LOAD 'myData.txt' USING PigStorage(',') AS (id, attrs) ; 
B = FOREACH A GENERATE FLATTEN(TOKENIZE(attrs, '|')) AS attr:chararray ;
-- Now that the data is loaded as chararrays REPLACE will work 
C = FOREACH B GENERATE REPLACE(attr,'m','market') AS attrchanged ;
因此,当ATTR被拆分和展平时,它还将被转换为字符集。通常,您可能希望使用模式提前声明类型

每个步骤的模式和输出如下所示:

(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)
 Could not infer the matching function for org.apache.pig.builtin.REPLACE as 
 multiple or none of them fit. Please use an explicit cast.
A: {id: bytearray,attrs: bytearray}
((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))
B: {attr: chararray}
( 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)
(mas=1)
(mpc=4.977552)
(country=ABC))
C: {attrchanged: chararray}
( marketfp=621)
(marketdus=4.0)
(marketduc=5.0)
(marketas=1)
(marketpc=4.0)
(marketfn=1)
(country=ABC))
( address=1000+marketity)
(marketus=1)
(namarkete=kailtig+bksyt)
(marketas=1)
(marketpc=4.977552)
(country=ABC))

对原问题:

因为输入行的元素数不同

(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(*));
那么,根据我目前的理解,如果你

DESCRIBE B;
它应该返回“B的架构未知”

这是因为此时有两行的列数不同。如果您现在用descripe查看C,它可能会给出{NULL}。手册说,未知模式实际上被视为bytearray,但它似乎无法转换为chararray和

D = FOREACH C GENERATE (chararray)$0
给出“不能由tearray向chararray施放”。与此反应略有不同

D = FOREACH C GENERATE $0 as foo:chararray
它给出了“错误1031:不兼容字段模式:声明为“C:chararray”,推断为:NULL”


这是我在尝试用我的数据和pig 0.11.1做类似的事情时,对所发生事情的理解。但这并不能真正解决问题。我希望唯一的解决办法是不要将其存储到光盘中,然后再次读取

当您描述B时,它返回“Schema unknown”或任何列为NULL,这意味着未定义架构或数据类型。 它出了问题,因为拜特利的演员有问题。 因此,使用存储创建文件并再次加载模式可以解决此问题。
是的,是头顶

我试过了,但是使用这种方法,第二条语句只填充了以下属性----()(address=1000+mity),我已经为答案中的每个步骤添加了模式和输出。问题到底在哪里?它起作用了!!!!我想我忽略了剧本。我还尝试包含tobag()函数。非常感谢你。