2016-10-25 3 views
0

나는 1000 개의 json 파일을 가지고 있는데, 각각의 파일에 대해 몇 가지 변환을 수행 한 다음 값에 대한 연산이 겹칠 수있는 병합 된 출력 파일을 생성해야합니다 (예 : 난 wholeTextFiles으로 파일을 읽을 경우에는 title,content 쌍으로하고 map 기능, 난 json treecontent를 분석하고 난 병합을 수행하는 방법과 변환을 수행,Spark : 변환을 병합하는 방법

정도) 값을 반복적 안 출력?

결과 RDD에서 값을 병합하기 위해 다른 변환이 필요하며 어떻게 작동합니까? 변환의 일부로 업데이트 될 모든 맵 블록 사이에 공유 객체 (List 또는 Map 또는 RDD (?))를 가질 수 있으므로 반복되는 값을 확인할 수 있습니까?

P .: 출력이 부품 파일을 생성하더라도, 나는 여전히 반복을 원하지 않습니다.

코드 :

//read the files as JavaPairRDD , which gives <filename, content> pairs 
String filename = "/sample_jsons"; 
JavaPairRDD<String,String> distFile = sc.wholeTextFiles(filename); 

//then create a JavaRDD from the content. 
JavaRDD<String> jsonContent = distFile.map(x -> x._2); 

//apply transformations, the map function will return an ArrayList which would 
//have property names. 

JavaRDD<ArrayList<String>> apm = jsonContent.map(
       new Function< String, ArrayList<String> >() { 
          @Override 
          public ArrayList<String> call(String arg0) throws Exception { 

           JsonNode rootNode = mapper.readTree(arg0); 
           return parseJsonAndFindKey(rootNode, "type", "rootParent"); 
          } 
       }); 

그래서, 각 JSON 파일에서 ArrayList의 모든 첫 번째 레벨 속성을 얻을 수 있어요 이런 식으로.

이제는이 모든 arraylists의 합집합으로 중복 ArrayList이 필요합니다. 중복을 제거하십시오. 나는 그것을 어떻게 얻을 수 있습니까?

답변

0

1000 개의 json 파일에 1000 개의 RDD가 필요한 이유는 무엇입니까?

입력 단계에서 1000 개의 json 파일을 하나의 RDD로 병합하는 데 문제가 있습니까?

입력 단계에서 하나의 RDD를 사용한다면이 RDD에서 필요한 모든 작업을 수행하기가 쉽지 않습니다.

+0

1000은 큰 숫자 일 뿐이지 만 lacs 일 수 있습니다. – gaurav5430

+0

괜찮습니다. 하나의 입력 RDD에 파일의 전체 디렉토리를 읽는 데 문제가 있습니까? – Yaron

+0

전체 텍스트 파일을 읽을 경우 각 텍스트 파일에 대해 하나의 rdd를 제공합니다. 전체 디렉토리에 대해 단일 rdd를 작성하면 (그 작업을 수행하는 방법을 모르는 경우) 각 레코드를 병렬로 조작 할 수 있습니까? , 변환 함수를 어떻게 지정하겠습니까 – gaurav5430