ОШИБКА 2997: Обнаружено исключение ввода-вывода. Директория part1 не существует

У меня проблема с выполнением скрипта в Apache Pig. У меня есть 3 файла, а именно movies.csv, ratings.csv, tags.csv. Сначала я хочу загрузить "movies.csv", затем загрузить "ratings.csv" и объединить обе таблицы. Но я сталкиваюсь с ошибкой при загрузке файлов. Код, данный мной, выглядит следующим образом:

register 'piggybank-0.15.0.jar'
DEFINE CSVLoader org.apache.pig.piggybank.storage.CSVLoader();
part1 = LOAD '/home/cloudera/ml-20m/movies' as (movieId: chararray, title: chararray, genre: chararray);
cat part1;

Когда я даю команду "кошка", я получаю сообщение об ошибке, так как

След Свинья

ERROR 2997: Encountered IOException. Directory part1 does not exist.

java.io.IOException: Directory part1 does not exist.
    at org.apache.pig.tools.grunt.GruntParser.processCat(GruntParser.java:677)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:233)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:198)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:173)
    at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69)
    at org.apache.pig.Main.run(Main.java:547)
    at org.apache.pig.Main.main(Main.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Но у меня есть файл в указанном месте. Я не знаю, почему свинья не может распознать входной файл. Я попытался, поместив входной файл в hdfs и загрузив файл. Но ошибка такая же, хотя. Кто-нибудь может мне помочь, пожалуйста. Заранее спасибо.

1 ответ

Решение

part1 - это не файл, а отношение. Когда вы используете команду LOAD в Pig, вы указываете загрузить содержимое файла в отношение. Вы не можете использовать cat в отношении, так как наиболее распространенное использование cat - это чтение содержимое файлов. Для отображения содержимого part1 используйте

DUMP part1;

иначе, если вы настаиваете на использовании cat, укажите полный путь к файлу

cat /home/cloudera/ml-20m/movies;
Другие вопросы по тегам