猪十进制值不起作用

时间:2017-04-14 09:00:06

标签: csv hadoop apache-pig etl cloudera

我正在研究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文件中,我对petrol_average加拿大和法国有价值。 我的猪脚本没有显示价值,巴西的价值是5,78524512,价值自动舍入。

你对我的问题有答案吗?

抱歉我的英文。

2 个答案:

答案 0 :(得分:0)

  

myfile.csv

的样本

一个,578524512

B,8596243

C,15424685

d,14253685

  

<强>码

A =使用PigStorage(',')加载'data / MyFile.txt'为(国家:chararray,petrol_average:long);

注:

  

你创建了一个带有double的模式,但你的数据是简单的整数,所以它删除了第一个数字之后的数据,这样我就可以使用它了

咕噜&GT; dump A;

咕噜&GT; B = FOREACH A生成国家,petrol_average;

咕噜&GT;转储B;

  

结果

(一,578524512)

(B,8596243)

(C,15424685)

(d,14253685)

工作很开心hadoop:)

答案 1 :(得分:0)

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