2016-09-14 1 views
2

일부 60K 기능 (크기 a.k.a. 열)이있는 데이터 세트를 클러스터하고 (Hadoop을 사용하여) 분할하려고합니다. 이 데이터 세트는 인스턴스가 거의 없습니다 (약 100 행). 데이터를 가로로 분할하는 대신 피쳐 클러스터에 따라 분할하고 싶습니다. 예를 들어, 3 클러스터를 얻는다면 각 클러스터에 3 개의 다른 노드에서 실행하기 위해 20K 개의 열과 100 개의 행이 필요합니다.데이터를 가로로 나누지 않고 세로로 나누는 방법은 무엇입니까?

어떻게 이런 종류의 분할을 달성 할 수 있습니까? 그렇지 않으면 Hadoop이 아닌 다른 프레임 워크에 대한 제안을 제공하여이 분할을 용이하게 할 수 있습니까?

+0

? 수행 할 작업이 열 단위 작업이며 동일한 매퍼에서 전체 레코드 (행)가 필요하지 않습니까? 어떤 형식으로 데이터 집합을 사용할 수 있습니까? –

+0

데이터 세트는 csv 형식입니다. 네, 연산은 엔트로피를 찾는 것과 같습니다. 그래서 그것은 현명한 열이 될 것입니다. 동일한 매퍼에서 전체 레코드가 필요하지 않습니다. – phoenix

+0

쪽매 파일 형식이 도움이 될 수 있습니다. 그것은 기둥 형 스토리지 레이아웃을 가지고 있습니다. Mapreduce 작업은 동일한 열에서 특정 열을 읽고 동일 작업을 적용 할 수 있습니다. 당신은 그것에 대해 더 많은 것을 할 수있다 –

답변

1

우선 :이 작은 데이터 세트 (60k * 100은 몇 메가 바이트)로, MapReduce는 매우 나쁜 선택입니다. 무거운 오버 헤드가 발생합니다. 데이터가 메인 메모리에 저장되면 Hadoop을 사용하지 마십시오! 심지어 Excel도 빠릅니다.

그 외에도에서, 당신은 분명히 당신의 행과 열 식별자를 전환 매핑에 의해 열 저장에 행 저장소에서 변환 할 수 있습니다

당신은 당신의 데이터 세트에 수행하려는 작업에 어떤 종류의
def map(key, row): 
    for column, value in row: 
     send(column, (key, value)) 
+0

나는 멀티 쓰레딩이 프로세스 병렬화를위한 반면에 hadoop은 데이터의 병렬화에 사용되는 어딘가를 읽었다. 나는 3 부분으로 데이터를 나누어야하고 3 부분에 동일한 알고리즘을 적용해야합니다. 전체 시간을 줄이기 위해 나는 hadoop에서 그것을하고 싶다. 동일한 (데이터 병렬화를 위해) 다중 스레딩을 사용할 수 있습니까? 아니면 다른 가능한 옵션이 될 수 있습니까? – phoenix

관련 문제