我正在研究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,价值自动舍入。
你对我的问题有答案吗?
抱歉我的英文。
答案 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。