나는 1000 개의 json 파일을 가지고 있는데, 각각의 파일에 대해 몇 가지 변환을 수행 한 다음 값에 대한 연산이 겹칠 수있는 병합 된 출력 파일을 생성해야합니다 (예 : 난 wholeTextFiles
으로 파일을 읽을 경우에는 title,content
쌍으로하고 map
기능, 난 json tree
로 content
를 분석하고 난 병합을 수행하는 방법과 변환을 수행,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
이 필요합니다. 중복을 제거하십시오. 나는 그것을 어떻게 얻을 수 있습니까?
1000은 큰 숫자 일 뿐이지 만 lacs 일 수 있습니다. – gaurav5430
괜찮습니다. 하나의 입력 RDD에 파일의 전체 디렉토리를 읽는 데 문제가 있습니까? – Yaron
전체 텍스트 파일을 읽을 경우 각 텍스트 파일에 대해 하나의 rdd를 제공합니다. 전체 디렉토리에 대해 단일 rdd를 작성하면 (그 작업을 수행하는 방법을 모르는 경우) 각 레코드를 병렬로 조작 할 수 있습니까? , 변환 함수를 어떻게 지정하겠습니까 – gaurav5430