2017-06-29 45 views
-2

这是我的数据集 品牌名称其次是价格在$符号我是在猪编程,我会加载下面的数据集

Apple iPhone 6s Plus 16GB Space Gray T-Mobile Smartphone 2 cases + Box: 
Iphone 6s 16gb rose gold factory unlocked:$280 
iPhone 6s 64gb T-Mobile:$350 
Iphone 6S Plus 64 GB Space Gray Sprint International Unlocked:$385 
iPhone 6s plus 64gb unlocked.:$600 

,当我使用此命令加载此数据:

grunt> scrap1 = LOAD '/user/vickysmartboy15/hadoop-test1/scrap.txt' USING org.apache.pig.piggybank.storage.MyRegExLoader('([^\\:]+):([^\\:])') as (Name:chararray, price:chararray); 

使用查看数据后:转储操作

我的结果是这样

(Apple iPhone 6s Plus 16GB Space Gray T-Mobile Smartphone 2 cases + Box,$) 

(Iphone 6s 16gb rose gold factory unlocked,$) 

(iPhone 6s 64gb T-Mobile,$) 

(Iphone 6S Plus 64 GB Space Gray Sprint International Unlocked,$) 

(BRAND NEW Apple iPhone 6S 32Gb Silver Verizon UNLOCKED Clean ESN,$) 

(iPhone 6s plus 64gb unlocked.,$) 

只有$不显示编号。

我该如何解决这个问题?

+0

发生了什么错误? – TKHN

+0

Sry对于上一个问题,这是实际发生的事情。 – vicky15

+0

在第一行中,':'后面没有任何内容。没有价格。请用正确的数据更新问题。另外,使用'PigStorage(':')'而不是使用RegEx加载器,你应该没问题。 – philantrovert

回答

0
scrap1 = LOAD '/var/opt/teradata/home/fsbappdev/ashish/scrap.txt' using PigStorage(':') AS (Name:chararray, price:chararray); 

dump scrap1会给你下面的数据,我希望这是预期的。

(Apple iPhone 6s Plus 16GB Space Gray T-Mobile Smartphone 2 cases + Box,)

(Iphone 6s 16gb rose gold factory unlocked,$280)

(iPhone 6s 64gb T-Mobile,$350)

(Iphone 6S Plus 64 GB Space Gray Sprint International Unlocked,$385)

(iPhone 6s plus 64gb unlocked.,$600)

如果要删除$签名就可以使用未来的关系就像

scrap2 = foreach scrap1 generate Name, REPLACE(price,'\\\$','') 
+0

谢谢这个帮助。但我只是想过滤的价格水平就像最高价格,最低价格平均等我不能做计算这一个数据类型是chararray。所以我使用以下方法将CONVERT CHARARRAY TO INT。 – vicky15

+0

grunt> scrap2 = foreach scrap generate Name,REPLACE(price,'\\\ $',''); grunt> tab = FOREACH scrap GENERATE $ 0作为名称:chararray,$ 1作为价格:int; grunt> fil = FILTER tab BY(prices == 450); grunt> dump fil;但我得到了一些错误///]:java.lang.ClassCastException:java.lang.Integer不能转换为java.lang.String – vicky15

+0

sry在我的FOREACH查询中,一个是scrap2而不是一个废品(错误类型) – vicky15

相关问题