pig错误:意外字符“\”

5kgi1eie  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(452)

我是hadoop和pig的新手。我正在尝试在vmware上的centos6环境中运行一个示例pig脚本:

records = LOAD '2013_subset.csv' USING PigStorage(',') AS              
(Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,\               
CRSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,\              
CRSElapsedTime,AirTime,ArrDelay,DepDelay,Origin,Dest,\              
Distance:int,TaxiIn,TaxiOut,Cancelled,CancellationCode,\              
Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,\              LateAircraftDelay);milage_recs = 
GROUP records ALL;tot_miles = FOREACH milage_recs GENERATE SUM(records.Distance);STORE tot_miles INTO /user/root/totalmiles;

此代码保存到名为totalmiles.pig的文件中。运行后,它将完成,并出现以下错误:
error org.apache.pig.tools.grunt.grunt--错误:意外字符“\”
从代码中删除字符“\”时,会出现另一个错误:
error org.apache.pig.tools.grunt.grunt--错误:不匹配的输入“/”应为quotedstring
我无法找到此特定错误的解决方案。我已在centos7下的其他vm(virtulabox)上运行此程序,并收到一个不同的错误a参数替代:i。我希望有人能解释一下。
谢谢!wasmithpfs公司

iswrvxsc

iswrvxsc1#

删除反斜杠,即“\”,在store语句中,路径必须用引号括起来。

records = LOAD '2013_subset.csv' USING PigStorage(',') AS (Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,RSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,CRSElapsedTime,AirTime,ArrDelay,DepDelay,Origin,Dest,Distance:int,TaxiIn,TaxiOut,Cancelled,CancellationCode,Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,LateAircraftDelay);
milage_recs = GROUP records ALL;
tot_miles = FOREACH milage_recs GENERATE SUM(records.Distance);
STORE tot_miles INTO '/user/root/totalmiles';
jtoj6r0c

jtoj6r0c2#

有两个问题:1。在load语句中,不需要“\”。查询解析器可以处理换行符。试试下面的load语句。

records = LOAD '2013_subset.csv' USING PigStorage(',') AS (Year, Month, DayofMonth,
DyOfWeek, DepTime, CRSDepTime, ArrTime, CRSArrTime, UniqueCarrier, FlightNum, TailNum,
ActualElapsedTime, CRSElapsedTime, AirTime, ArrDelay, DepDelay, Origin, Dest, Distance:int,
TaxiIn, TaxiOut, Cancelled, CancellationCode, Diverted, CarrierDelay, WeatherDelay, 
NASDelay, SecurityDelay, LateAircraftDelay);

在存储语句中,输出路径的into语句后面应该有单引号。请尝试以下操作:
将tot_miles存储到“/user/root/totalmiles”中;

mlnl4t2r

mlnl4t2r3#

错误似乎很明显:
人物 \ 不应该在那里。
解决这个问题后,代码可以进一步编译,然后会出现下一个错误:
在那里你有一个 / 应为带引号的字符串。
尝试用引号表示路径,如:

'/user/root/totalmiles'

相关问题