[HADOOP] Pig로 (A, B, C)를 (AB, AC, BC)로 바꾸는 방법?
HADOOPPig로 (A, B, C)를 (AB, AC, BC)로 바꾸는 방법?
Pig에서 (A, B, C) 다음 백이 주어지면 어떻게 든 모든 값의 고유 조합을 계산할 수 있습니까? 내가 찾고있는 결과는 (AB, AC, BC)와 같습니다. 알파벳순으로 정렬하면 기존 값과 중복되므로 BA, CA, CB는 무시합니다.
해결법
-
==============================
1.이와 같은 작업을 수행하는 유일한 방법은 UDF를 작성하는 것입니다. 이것은 당신이 원하는 것을 정확하게 할 것입니다 :
이와 같은 작업을 수행하는 유일한 방법은 UDF를 작성하는 것입니다. 이것은 당신이 원하는 것을 정확하게 할 것입니다 :
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)); } } DataBag output = BagFactory.getInstance().newDefaultBag(outputTuples); return output; } }
from https://stackoverflow.com/questions/29994246/how-to-turn-a-b-c-into-ab-ac-bc-with-pig by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop 설치없이 로컬 파일 시스템에서 hadoop 시퀀스 파일을 만드는 방법은 무엇입니까? (0) | 2019.09.12 |
---|---|
[HADOOP] hadoop은 스파크 상태에서 실행될 때 stderr을 stdout에 병합합니다. (0) | 2019.09.12 |
[HADOOP] 내 프로그램을 실행하는 동안 hadoop 메시지가 표시됩니다. 무슨 뜻이에요? (0) | 2019.09.12 |
[HADOOP] 원사 미니 클러스터 컨테이너 로그 디렉토리에 syslog 파일이 없습니다 (0) | 2019.09.12 |
[HADOOP] Eclipse의 하둡 및 리듀서 수 (0) | 2019.09.12 |