Фильтрация столбцов в сценарии PIG LATIN вставляет данные из других столбцов в пустые ячейки. - PullRequest
0 голосов
/ 08 марта 2019

Хорошо, я сделал все поиск в Google и прочел документацию для этого и до сих пор не могу найти решение.

Я загружаю экспорт CSV-файла отсюда: Дорожно-транспортные происшествия в Чикаго

Я написал сценарий PIG, который отфильтровывает ненужные столбцы, так что вывод будетсодержат только нужные столбцы.У меня проблема в том, что когда я использую (FOREACH GENERATE) PIG, возьмет данные из предыдущего столбца и вставит их в следующее поле, если это поле было пустым.

Я не хочу отфильтровывать нулевые значения, поскольку мне нужна каждая строка в этом наборе данных.Как я могу запретить PIG вставлять неверные данные или есть способ вставить "", если PIG встречает нулевое значение вместо вставки материала из предыдущих столбцов?

Просто пара объяснений:

Я создаю схему схемы на foreach ('псевдоним' как 'псевдоним'), потому что если я не сделаю этого, вывод удалит запятые для нулевых значений, и таблица будет испорчена, так как я собираюсь импортироватьэто в SQL Server, и мне нужно, чтобы все PK и FK присутствовали для сопоставления с другими таблицами.

Я использую DISTINCT для сохранения вывода в одном файле, в противном случае вывод будет распространяться на несколькофайлы.

Вот вывод, который я получаю после запуска сценария:

Вывод сценария PIG

Вот мой сценарий PIG:

A = LOAD 'Traffic_Crashes.csv' 
USING PigStorage (',') 
AS (RD_NO: chararray, CRASH_DATE_EST_I: chararray, CRASH_DATE: chararray, POSTED_SPEED_LIMIT: chararray, TRAFFIC_CONTROL_DEVICE: chararray, DEVICE_CONDITION: chararray, WEATHER_CONDITION: chararray, LIGHTING_CONDITION: chararray, FIRST_CRASH_TYPE: chararray, TRAFFICWAY_TYPE: chararray, LANE_CNT: chararray, ALIGNMENT: chararray, ROADWAY_SURFACE_COND: chararray, ROAD_DEFECT: chararray, REPORT_TYPE: chararray, CRASH_TYPE: chararray, INTERSECTION_RELATED_I: chararray, NOT_RIGHT_OF_WAY_I: chararray, HIT_AND_RUN_I: chararray, DAMAGE: chararray, DATE_POLICE_IFIED: chararray, PRIM_CONTRIBUTORY_CAUSE: chararray, SEC_CONTRIBUTORY_CAUSE: chararray, STREET_NO: chararray, STREET_DIRECTION: chararray, STREET_NAME: chararray, BEAT_OF_OCCURRENCE: chararray, PHOTOS_TAKEN_I: chararray, STATEMENTS_TAKEN_I: chararray, DOORING_I: chararray, WORK_ZONE_I: chararray, WORK_ZONE_TYPE: chararray, WORKERS_PRESENT_I: chararray, NUM_UNITS: chararray, MOST_SEVERE_INJURY: chararray, INJURIES_TOTAL: chararray, INJURIES_FATAL: chararray, INJURIES_INCAPACITATING: chararray, INJURIES_NON_INCAPACITATING: chararray, INJURIES_REPORTED__EVIDENT: chararray, INJURIES_NO_INDICATION: chararray, INJURIES_UNKNOWN: chararray, CRASH_HOUR: chararray, CRASH_DAY_OF_WEEK: chararray, CRASH_MONTH: chararray, LATITUDE: chararray, LONGITUDE: chararray, LOCATION: chararray);

B = FOREACH A GENERATE RD_NO as RD_NO, CRASH_DATE as CRASH_DATE, PRIM_CONTRIBUTORY_CAUSE as PRIM_CONTRIBUTORY_CAUSE, MOST_SEVERE_INJURY AS MOST_SEVERE_INJURY;

C = DISTINCT D;

STORE C INTO 'crashFilter_Output/' USING PigStorage (',');

Спасибо всем, кто читает это, я супер новичок в этом, и это для школьного проекта.

1 Ответ

0 голосов
/ 13 марта 2019

Пожалуйста, попробуйте использовать CSVLoader.

DEFINE CSVLoader org.apache.pig.piggybank.storage.CSVLoader();
A = LOAD 'Traffic_Crashes.csv' USING CSVLoader() AS (RD_NO: char ...

Проблема в том, что PigStorage не распознает строки в кавычках. Поле типа

"OVER $1,500"

рассматривается как два поля в PigStorage и, таким образом, вызывает неожиданные сдвиги в ваших выходных данных.

...