gpt4 book ai didi

apache-pig - 无法在 pig 中将字节数组转换为字符数组

转载 作者:行者123 更新时间:2023-12-01 01:07:57 24 4
gpt4 key购买 nike

我有一个数据如下:

(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。

我怎么解决这个问题。请帮忙。

谢谢。

最佳答案

我不确定您是否 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 ;

因此,当 attrs 被拆分和展平时,它还会被转换为字符数组。通常,您可能希望使用模式提前声明类型。

每个步骤的架构和输出如下:
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))

关于apache-pig - 无法在 pig 中将字节数组转换为字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com