我有一个名为test.txt的文件,记录如下(忽略圆点):
"1" "a" "x"
"2" "b" "y"
"3" "c" "z"
(tab作为字段分隔符)
我的Pig脚本(测试.Pig):
a=LOAD '/Analytics/warehouse/SF/test.txt' as (fullrecord:chararray);
b=FOREACH a generate REPLACE($0,'\t',',');
STORE b INTO 'hdfs://localhost:9000/Analytics/warehouse/SF/sf.out' USING PigStorage(',');
我使用以下命令运行脚本:pig -x mapreduce test.pig
输出:
.../warehouse/SF/sf.out
part-m-0000
而内容仅仅是:
"1"
"2"
"3"
问题1-其他字段发生了什么情况?
问题2-为什么制表符没有被“,"更改?
Q3-我怎样才能达到下一个结果?
"1","a","x"
"2","b","y"
"3","c","z"
Q4-如何使用HIVE查询结果?
1条答案
按热度按时间i2byvkas1#
其他字段发生了什么情况
LOAD默认使用制表符分隔符。您的
GENERATE
只抓取了第一列。您需要USING PigStorage('\n')
才能加载整行。但您也可以不这样做,而只是删除FOREACH
,然后使用PigStorage(',')
进行STORE为什么制表符没有更改
与上面的内容相关,当您只有一个元素时,没有要替换的内容。
我如何使用HIVE查询该结果?
使用HCatalog,而不是PigStorage -
然后查询该表。
或者,您需要在HDFS数据上定义一个配置单元外部表。
您也可以完全跳过使用Pig;配置单元可以查询具有选项卡的文件-
STORED AS TEXT FIELDS DELIMITED BY '\t'