我在我的机器上安装了Pig 0.12。我跑的时候
darwin$ pig
grunt> ls /data/
hdfs://Nmame:10001/data/pg20417.txt<r 3> 674570
hdfs://Nname:10001/data/pg4300.txt<r 3> 1573150
hdfs:/Nname:10001/data/pg5000.txt<r 3> 1423803
hdfs://Nname:10001/data/weather <dir>
但是当我尝试创建查询时,出现以下错误:
grunt> book = load '/data/pg4300.txt' as (lines:chararray);
2014-06-30 17:40:08,939 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000: Error during parsing. Encountered " <PATH> "book=load "" at line 2, column 1.
Was expecting one of:
<EOF>
"cat" ...
"clear" ...
"fs" ...
"sh" ...
"cd" ...
"cp" ...
"copyFromLocal" ...
"copyToLocal" ...
"dump" ...
"\\d" ...
"describe" ...
"\\de" ...
"aliases" ...
"explain" ...
"\\e" ...
"help" ...
"history" ...
"kill" ...
"ls" ...
"mv" ...
"mkdir" ...
"pwd" ...
"quit" ...
"\\q" ...
"register" ...
"rm" ...
"rmf" ...
"set" ...
"illustrate" ...
"\\i" ...
"run" ...
"exec" ...
"scriptDone" ...
"" ...
"" ...
<EOL> ...
";" ...
Details at logfile: /Users/Documents/pig_1404175088198.log
我尝试将load
更改为LOAD
,将as
更改为AS
,但没有任何效果。
答案 0 :(得分:9)
我遇到了同样的问题,正在寻找解决方案。事实证明,如果你不给空间,就会发生这种情况。 book=load
会给您一个错误。 book = load
会奏效。我不确定这是否是预期的行为。
答案 1 :(得分:0)
尝试以下应该有效的解决方案 -
1)如果您的数据存在于HDFS默认目录中,则删除/ data /不需要使用绝对路径。我假设/ data是存储所有数据的默认目录 -
book = load 'pg4300.txt' as (lines:chararray);
2)尝试使用PigStorage to specify the delimiter。我在这里使用逗号作为分隔符,您可以将它替换为您正在使用的分隔符 -
book = load 'pg4300.txt' using PigStorage(',') as (lines:chararray);
希望这有帮助。
答案 2 :(得分:0)
尝试使用PigStorage来确定如何将数据读入书中
http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#PigStorage
答案 3 :(得分:0)
引发错误: stocks_by_symbol = stock_symbol的集团股票;
作品很棒: stocks_by_symbol = stock_symbol的集团股票;
注意“=”
之前和之后的空格答案 4 :(得分:0)
尝试在grunt提示符中转储别名(错误的名称)时发生此错误。例如,键入dump r45
而不是dump 45
,因此会抛出上述错误。
提供正确的别名后,它可以正常工作。
另外,请确保从加载文件所在的位置执行查询。
答案 5 :(得分:0)
我遇到了同样的问题,我通过在=
和LOAD
关键字之间提供空格来解决这个问题。