Я хотел бы использовать Apache Pig для создания большого значения ключа → значения, просматривать вещи на карте и перебирать ключи. Однако даже не кажется синтаксисом для выполнения этих действий; Я проверил руководство, вики, образец кода, книгу Elephant, Google и даже попытался разобрать источник парсера. Каждый пример загружает картографические литералы из файла... и никогда не использует их. Как вы можете использовать карты Pig?
Во-первых, похоже, что нет возможности загрузить файл с двумя столбцами CSV на карту напрямую. Если у меня есть простой map.csv
:
1,2
3,4
5,6
И я пытаюсь загрузить его как карту:
m = load 'map.csv' using PigStorage(',') as (M: []);
dump m;
Я получаю три пустых набора:
()
()
()
Итак, я пытаюсь загрузить кортежи и затем сгенерировать карту:
m = load 'map.csv' using PigStorage(',') as (key:chararray, val:chararray);
b = foreach m generate [key#val];
ERROR 1000: Error during parsing. Encountered " "[" "[ "" at line 1, column 24.
...
Многие вариации синтаксиса также терпят неудачу (например, generate [$0#$1]
).
ОК, поэтому я превращаю свою карту в формат буквенного обозначения Pig как map.pig
:
[1#2]
[3#4]
[5#6]
И загрузите его:
m = load 'map.pig' as (M: []);
Теперь загрузите несколько ключей и попробуйте найти:
k = load 'keys.csv' as (key);
dump k;
3
5
1
c = foreach k generate m#key; /* Or m[key], or... what? */
ERROR 1000: Error during parsing. Invalid alias: m in {M: map[ ]}
Hrm, хорошо, возможно, поскольку есть два отношения, нам нужно соединение:
c = join k by key, m by /* ...um, what? */ $0;
dump c;
ERROR 1068: Using Map as key not supported.
c = join k by key, m by m#key;
dump c;
Error 1000: Error during parsing. Invalid alias: m in {M: map[ ]}
нормально. Как я могу ссылаться на ключ (или значение) карты? Синтаксис схемы карты не означает, что вы даже называете ключ и значение (в списке рассылки указывается, что нет способа назначить типы).
Наконец, я просто хотел бы найти все ключи на моей карте:
d = foreach m generate ...oh, forget it.
Является ли тип карты свиньи полупеченным? Что мне не хватает?