Передача параметра с пробелом - PullRequest
2 голосов
/ 01 апреля 2020

Когда я запускаю свой скрипт с командой, показанной ниже, с параметром police_force, установленным как "Surrey Police", это выдает мне ошибку

"ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000: Error during parsing. File not found: Police"" 

Если я передаю значение как "Surrey_Police", это работает нормально, но ничего не возвращает

-- knownvalues: dataset presented
-- date1: one date of comparison
-- date2: 2nd date of comparison
-- police_force: falls within 
-- crime_type
-- Usage: exec -param knownvalues='/user/cw/input/all.txt' -param date1='2017-05' -param date2='2017-06' -param police_force="Surrey Police" /home/xiaorui/CW/compare_crime.pig


knownvalues = LOAD '$knownvalues' USING PigStorage(',') AS (crimeid:chararray,month:chararray,reportedby:chararray,fallswithin:chararray,longitude:float,latitude:float,location:chararray,lsoacode:chararray,lsoaname:chararray,crimetype:chararray,lastoutcome:chararray,context:chararray);


knownvalues = SAMPLE knownvalues 0.00001;

location = FILTER knownvalues BY (fallswithin MATCHES $police_force);

first_date = FILTER location BY (month MATCHES '$date1');

second_date = FILTER location BY (month MATCHES '$date2');

DUMP first_date;

Если я использую строку ниже, код работает как задумано

location = FILTER knownvalues BY (fallswithin MATCHES 'Surrey Police');

1 Ответ

0 голосов
/ 28 апреля 2020

Я получил это с помощью следующих шагов.

a.) Во-первых, команда Police_force from filter должна быть заключена в одинарные кавычки, как показано ниже. location = FILTER известные значения BY (падение в спичках '$ Police_force' );

b.) Во-вторых, нам необходимо включить экранирующий символ () , а также вдоль с одинарными или двойными кавычками в команде выполнения.

pig -x local -param knownvalues='/home/ec2-user/data' -param police_force="Surrey\ Police" /home/ec2-user/test.pig
or
pig -x local -param knownvalues='/home/ec2-user/data' -param police_force='Surrey\ Police' /home/ec2-user/test.pig

Ниже приведены мой код тестирования и команды.

Свинья Входной файл данных: данные кошки

mary,19
john,18
joe,18
Surrey Police,20

Код образца свиньи: cat test.pig

knownvalues = LOAD '$knownvalues' USING PigStorage(',') AS (name:chararray,age:int);
dump knownvalues;
describe knownvalues;

location = FILTER knownvalues BY (name MATCHES '$police_force');

dump location;
describe location;

Выход:

После загрузки :

(mary,19)
(john,18)
(joe,18)
(Surrey Police,20)
knownvalues: {name: chararray,age: int}

После фильтра:

(Surrey Police,20)
location: {name: chararray,age: int}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...