2015-08-10 4 views
-1

Я таблица загружается в переменном в свинью, Схема выглядит следующим образом: enter image description hereСвиньи латинского программирование

То, что я хочу сделать через свинью латинского алфавит, чтобы заполнить значение «JKL», «PQR »и т. д. в столбце 4, который пуст для остальных строк. Пустые строки должны копировать только значения в предыдущей ячейке в столбце 4. Проверьте приведенный ниже пример.

Целевая таблица должна нравится:

enter image description here

ответ

0

ли Col1 одинакова для всех строк. Если да, то используйте два набора фильтра еще и есть, чтобы найти значение Uniq между col1 & COL4 и удалить значение использования THN NULL ниже шаги

  • Filter_One захватит COL1 & COL4 где COL4 не NULL

  • Filter_Two будет захватывать Col1, Col2, Col3. Используйте Регистрация Filter_one &

  • Filter_Two, где Filter_two будет напечатана первая, вторая, третья колонна
    и будет pronted на 4-й позиции Filter_one второй колонке,

надеюсь, то же самое будет помогать

сценарий Pig будет как:

Filter_one = foreach Load_Data generate $0 as col1, $3 as col4; 
Filter_one_temp = filter Filter_one by ($1 is not null); 
Filter_two = foreach Load_Data generate $0 as col1, $1 as col2, $2 as col3; 
Join_filter = JOIN Filter_two by $0 LEFT, Filter_one_temp by $0; 
generetate_output = foreach Join_filter generate $0 as col1, $1 as col2 , $2 as col3,$4 as col4; 
store generetate_output into 'dfs_path' using PigStorage(','); 

, как хранит то же самое с, разделитель поэтому выход будет как

(ABC,34,23,XYZ) 
(ABC,12,78,XYZ) 
(ABC,4,21,XYZ) 
(ABC,22,54,XYZ) 
(DEF,32,455,JKL) 
(DEF,21,45,JKL) 
(DEF,45,687,JKL) 
(DEF,232,565,JKL) 
(DEF,23,32,JKL) 
+0

Вот что я пробовал делать в самом начале. Но он не дает желаемого результата. Показывает эту ошибку: «ОШИБКА 1070: Не удалось решить org.apache.pig.piggybank.storage.CSVExcelStorage с помощью импорта: [, java.lang., Org.apache.pig.builtin., Org.apache.pig.impl.builtin .] " –

+0

В этом случае ошибка при импорте данных, если это так, пожалуйста, следуйте приведенной ниже ссылке, в которой указывается исключение импорта avod [Link1] (http://stackoverflow.com/questions/17816078/csv-reading- in-pig-csv-file-contains-quoted-comma) или [Link2] (http://stackoverflow.com/questions/19573764/error-using-csvloader-from-piggybank) – Deb

+0

Хорошо, что соединения работают нормально после того, как я зарегистрировал файл банка piggybank. Но я не могу создать логику для реализации сценария, когда в Col 1 есть разные группы строк, а значения Col 4 должны заполняться для соответствующих групп в Col 1. (Как показано в отредактированной версии вопроса). Не могли бы вы помочь в этом отношении? –

1

если ваше требование, чтобы обновить значение COL4 к XYZ для всех записей, которые со значениями NULL или пусто, то вы можете использовать следующий фрагмент кода, чтобы сделать то же

--Load input data 
input_data = LOAD 'input.txt' USING PigStorage() AS (Col1:chararray, Col2:int, Col3:int, Col4:chararray); 

--Perform operation on each record 
input_data = FOREACH input_data GENERATE Col1, Col2, Col3, ((Col4 is null or TRIM(Col4) == '') ? 'XYZ' : Col4) as Col4; 

здесь при условии, что вы держите свой input_data то для каждой проверки звукозаписывающей ли нулевое или пустое значение COL4, если она затем обновить его с требуемым значением (XYZ), либо просто использовать существующее значение

+0

Фактически это были данные образца, и я не могу проверить условие для «XYZ», значение Col 4 не является постоянным. Рассмотрим этот сценарий: столбец 1 содержит различные повторяющиеся значения, такие как «ABC», «DEF» и т. Д., И для каждой группы значений в Col 1 первая строка в Col 4 заполняется («XYZ», как показано в примере), а остальные строк - это пробелы. Теперь я хочу заполнить эти строки тем, что значение col 4 содержит для каждой группы. –

Смежные вопросы