PIGMap减少输出和HIVE

im9ewurl  于 2022-11-01  发布在  Hadoop
关注(0)|答案(1)|浏览(182)

我有一个名为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查询结果?

i2byvkas

i2byvkas1#

其他字段发生了什么情况
LOAD默认使用制表符分隔符。您的GENERATE只抓取了第一列。您需要USING PigStorage('\n')才能加载整行。但您也可以不这样做,而只是删除FOREACH,然后使用PigStorage(',')进行STORE
为什么制表符没有更改
与上面的内容相关,当您只有一个元素时,没有要替换的内容。
我如何使用HIVE查询该结果?
使用HCatalog,而不是PigStorage -

STORE data_alias INTO 'tablename' USING org.apache.hcatalog.pig.HCatStorer();

然后查询该表。
或者,您需要在HDFS数据上定义一个配置单元外部表。
您也可以完全跳过使用Pig;配置单元可以查询具有选项卡的文件-STORED AS TEXT FIELDS DELIMITED BY '\t'

相关问题