Hadoop 使用Pig加载默认转储文件

Hadoop 使用Pig加载默认转储文件,hadoop,hive,apache-pig,Hadoop,Hive,Apache Pig,以下查询需要使用哪个PigStorage()加载文件 INSERT OVERWRITE DIRECTORY 'doop' select a.* from cdr.cell_tower_info 上述查询的输出如下所示 哈里亚纳·安巴拉404 20 80 37591 76.76746 30.373488 404-20-80-37591 哈里亚纳·安巴拉404 20 80 30021 76.76746 30.373488 404-20-80-30021 哈里亚纳·安巴拉404 20 80 375

以下查询需要使用哪个PigStorage()加载文件

INSERT OVERWRITE DIRECTORY 'doop'
select a.* from cdr.cell_tower_info
上述查询的输出如下所示


哈里亚纳·安巴拉404 20 80 37591 76.76746 30.373488 404-20-80-37591
哈里亚纳·安巴拉404 20 80 30021 76.76746 30.373488 404-20-80-30021
哈里亚纳·安巴拉404 20 80 37591 76.76746 30.373488 404-20-80-37591


我正在使用CDR分析,首先我需要使用select从表中检索一些字段并将其保存到HDFS文件夹中,此结果再次需要使用pig加载以进行进一步分析

我认为PigStorage('\001')应该能够在PIG中使用配置单元输出数据

或者,可以将配置单元表定义为以“\t”结尾的字段,这样就可以直接在PIG中使用结果。

可以试试吗?
input.txt

Haryana Ambala  404 20  80  37591   76.76746    30.373488   404-20-80-37591
Haryana Ambala  404 20  80  30021   76.76746    30.373488   404-20-80-30021
Haryana Ambala  404 20  80  37591   76.76746    30.373488   404-20-80-37591
PigScript:

A = LOAD 'input.txt' AS line;
B = FOREACH A GENERATE FLATTEN(STRSPLIT(line,'\\s+')) AS (f1:chararray,f2:chararray,f3:int,f4:int,f5:int,f6:int,f7:double,f8:double,f9:chararray);
C = FOREACH B GENERATE f1,f2,f8,f9;
DUMP C;
(Haryana,Ambala,30.373488,404-20-80-37591)
(Haryana,Ambala,30.373488,404-20-80-30021)
(Haryana,Ambala,30.373488,404-20-80-37591)
输出:

A = LOAD 'input.txt' AS line;
B = FOREACH A GENERATE FLATTEN(STRSPLIT(line,'\\s+')) AS (f1:chararray,f2:chararray,f3:int,f4:int,f5:int,f6:int,f7:double,f8:double,f9:chararray);
C = FOREACH B GENERATE f1,f2,f8,f9;
DUMP C;
(Haryana,Ambala,30.373488,404-20-80-37591)
(Haryana,Ambala,30.373488,404-20-80-30021)
(Haryana,Ambala,30.373488,404-20-80-37591)

如果您的数据存储在配置单元表中

X = LOAD 'hdfs://localhost:9000/user/hive/warehouse/input.txt' using PigStorage('\t')  AS line;
Y = FOREACH A GENERATE FLATTEN(STRSPLIT(line,'\\s+')) AS (A1:chararray,A2:chararray,A3:int,A4:int,A5:int,A6:int,A7:double,a8:double,A9:chararray);
Z = FOREACH B GENERATE A1,A2,A8,A9;
DUMP Z;
我的端口是9000。根据你的系统给予。

试试这个

CREATE EXTERNAL TABLE cell_tower_info
   FIELDS TERMINATED BY ','
   LOCATION 'doop'
   AS
SELECT .* from cdr.cell_tower_info

最初表(cdr.cell_tower_info)在hive中???@KishoreKumarSuthar是的表在HCATLog中您想在pig中加载上述数据并作为每个字段打印,对吗?我需要将上述结果加载到pig中以供进一步分析a=load'/user/hue/doop',使用PigStorage('\001');B=每个A生成$8作为单元id;垃圾场B;上面的查询是我尝试的,我得到了一个类似org.apache.pig.PigServer的错误-解析期间异常:解析期间出错。意外字符“0”(HaryanaAmbala40420803759176.7674630.373488404-20-80-37591,,,,,,)(HaryanaAmbala40420803002176.7674630.373488404-20-80-30021,,,,,,,,)(HaryanaAmbala40420803759176.7674630.373488404-20-80-37591,,,,,,,)我在运行查询时得到的结果是,它将整个列作为一个字符串,对我来说,它对给定的输入工作正常。我不确定为什么它对您不工作。好的,你们能检查一下你们的输入文件,让我知道每个空格的分隔符是什么吗。如果您使用的是windows,请在notepad++中打开输入文件,并检查notepad++->View->ShowSymbol下的隐藏分隔符。如果您使用的是MAC OS,则可以使用SublimiteText或Textmate编辑器查看-->显示不可见字符。这将帮助我们了解实际的分隔符是什么。在unix中,您可以在vim中使用“:set list”命令并检查空格字符。它显示的错误类似于无法在某个位置创建外部表