Я получаю следующее сообщение об ошибке при попытке компиляции моего Pig UDF с Maven (или с моей IDE IntelliJ по этому вопросу):Pig UDF не находя WritableComparable
cannot access org.apache.hadoop.io.WritableComparable
class file for org.apache.hadoop.io.WritableComparable not found
Так я решил добавить зависимость to hadoop-core для моего POM-файла, но все равно никаких изменений, хотя я проверил и класс WritableComparable находится в банке.
Мой UDF класс выглядит следующим образом:
public class INCREMENTAL_UPDATE extends EvalFunc<DataBag> {
TupleFactory tupleFactory = TupleFactory.getInstance();
BagFactory bagFactory = BagFactory.getInstance();
public DataBag exec(Tuple input) throws IOException {
if (null == input || input.size() != 0) {
return null;
}
try {
DataBag inputbag = (DataBag) input.get(0);
Iterator it = inputbag.iterator();
DataBag outputbag = bagFactory.newDefaultBag();
Tuple previousTuple = null;
while (it.hasNext()) {
Tuple currentTuple = (Tuple) it.next();
Tuple outputTuple = tupleFactory.newTuple();
for (int i = 0; i < currentTuple.size(); i++) {
Object currentvalue = currentTuple.get(i);
if (currentvalue == null) {
outputTuple.append(currentvalue);
} else {
outputTuple.append(previousTuple.get(i));
}
}
previousTuple = outputTuple;
outputbag.add(outputTuple);
}
return outputbag;
} catch (Exception e) {
throw new IOException("UDF INCREMENTAL_UPDATE failed");
}
}
}
Я еще выяснить, если это будет на самом деле работает, так как я не уверен, если UDF распространяется. Если это так, что предыдущий Tuple, вероятно, не сработает. Но я не могу даже проверить это, потому что я не могу скомпилировать из-за ошибки выше.
Я не использовал maven для компиляции бара UDF, я использую только муравей, поэтому я не могу с этим поделать. Но ваш трюк 'previousTuple' не будет работать. Функция 'exec' запускается на каждой записи, поэтому' previousTuple' всегда будет 'null'. Однако вы можете сделать 'предыдущийTuple' членом класса, и он, вероятно, перенесет его состояние в следующую запись. Поскольку записи могут обрабатываться в непредсказуемом порядке, однако, неясно, было ли это полезно. –