猪十进制值不起作用
Posted
技术标签:
【中文标题】猪十进制值不起作用【英文标题】:Pig decimal value not working 【发布时间】:2017-04-14 09:00:05 【问题描述】:我正在cloudera中学习PIG语言,我的十进制值有点问题。 我有一个 csv 文件,其中有很多不同类型的数据。 我有一个名为“petrol_average”的数据列,其值类似于“5,78524512”。
我想从我的 CSV 文件中加载这些数据。
我的脚本是:
*> a = LOAD ‘myfile.csv’ USING PigStorage(‘;’) AS (country: chararray,
> petrol_average: double);
>
> b = FOREACH a generate country, petrol_average;
>
> DUMP B;*
转储的结果是这样的:
*"(Canada, )
(Brazil, 5.0)
(France, )
(United States 8.0)
..."*
在我的 Csv 文件中,我对加拿大和法国的汽油平均值具有价值。 我的猪脚本没有显示值,巴西的值为 5,78524512,该值自动四舍五入。
你对我的问题有答案吗?
对不起我的英语。
【问题讨论】:
你可以转储关系a并显示输出,或者你可以上传csv样本 【参考方案1】:
myfile.csv
的示例
a,578524512
b,8596243
c,15424685
d,14253685
代码
A = 使用 PigStorage(',') 加载 'data/MyFile.txt' 作为 (country:chararray,petrol_average:long);
注意:
你已经创建了双精度模式,但你的数据是简单的整数,所以它会在第一个数字之后删除数据,这样我就一直使用它
咕噜>转储A;
grunt> B = FOREACH A 生成国家,petrol_average;
咕噜>转储B;
结果
(a,578524512)
(b,8596243)
(c,15424685)
(d,14253685)
工作正常,快乐的 hadoop :)
【讨论】:
感谢您的回复,但 long 类型对我不起作用,因为它是十进制值“5.78524512”我目前正在使用 chararray 来获取完整值。 A = 使用 PigStorage(',') 加载 'data/MyFile.txt' 作为 (country:chararray,petrol_average:float);它的工作正常,只是改变 long 以浮动在关系 A 的猪模式中。【参考方案2】:@MaheshGupta
感谢您的回答,当我使用 float 或 long 时,我会得到这样的结果:
()
(8.0)
()
()
()
()
()
()
()
()
()
当我在我的模式中将它声明为 chararray 时,我得到了这个结果:
(9,100000381)
(8,199999809)
(8,399999619)
(8,100000381)
(8,399999619)
(8,399999619)
(8,399999619)
(8,100000381)
(8,5)
(8,199999809)
(9)
我的脚本是这个:
a = LOAD 'myfile.csv' USING PigStorage(';') AS
(country: chararray;
petrol_average chararray);
b = FOREACH a generate petrol_average;
DUMP b;
我的大问题是除法或加法,因为我做不到,类型是 Chararray。
【讨论】:
我认为你错过了一些其他方面的东西,他们在使用 float 或 double 类型方面没有问题,并且你错过了 chararray 中的列 (:)以上是关于猪十进制值不起作用的主要内容,如果未能解决你的问题,请参考以下文章