猪十进制值不起作用

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 中的列 (:)

以上是关于猪十进制值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

猪拉丁程序不起作用

为啥恐慌恢复以局部变量返回值不起作用?

最小值不起作用

当指针指向数组时,为啥 operator(*) 的值不起作用?

为啥链接元素中的媒体属性对打印值不起作用? [复制]

在角度 FormGroup 上设置值不起作用