[Solved-1 Solution] How to turn (A, B, C) into (AB, AC, BC) with Pig ?
Problem:
How to turn (A, B, C) into (AB, AC, BC) with Pig ?
Solution:
By using UDF, we can achieve a desired result We can use the below code
public class CombinationsUDF extends EvalFunc<DataBag> {
public DataBag exec(Tuple input) throws IOException {
List<Tuple> bagValues = new ArrayList<Tuple>();
Iterator<Tuple> iter = ((DataBag)input.get(0)).iterator();
while (iter.hasNext()) {
bagValues.add(iter.next());
}
List<Tuple> outputTuples = new ArrayList<Tuple>();
for (int i = 0; i < bagValues.size() - 1; i++) {
List<Object> currentTupleValues = bagValues.get(i).getAll();
for (int j = i + 1; j < bagValues.size(); j++) {
List<Object> aux = new ArrayList<Object>(currentTupleValues);
aux.addAll(bagValues.get(j).getAll());
outputTuples.add(TupleFactory.getInstance().newTuple(aux));
}
}