2017-01-31 1 views
0

두 개의 데이터 집합이 있는데 브로드 캐스트로 등록하려고 할 때 하나의 데이터 집합 (더 작은 데이터 집합)을 등록해야합니다. 등록하려고 할 때 브로드 캐스트 기능을 사용할 수 있습니다.데이터 집합을 Spark에서 브로드 캐스트로 적용

다음
JavaRDD<String> maps = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt"); 
Broadcast<JavaRDD<String>> broadcastVar = ctx.broadcast(maps); 
//Broadcast<Map<Integer, String>> broadcastVar = ctx.broadcast(map); 
List<Integer> list = new ArrayList<Integer>(); 
list.add(1); 
list.add(2); 
list.add(9); 
JavaRDD<Integer> listrdd = ctx.parallelize(list); 
JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value()); 
System.out.println(mapr.collect()); 

내가 broadcastVar.value().get(x)을 얻을 수 없습니다입니다 : 여기

는 코드입니다. 브로드 캐스트로 매뉴얼지도를 작성하면 잘 작동하지만 텍스트 파일의 경우 작동하지 않습니다.

+0

브로드 캐스트 > broadcastVar = ctx.broadcast (maps.collect()); – mrsrinivas

+0

고마워, 지금 일해라. – user4342532

답변

3

클러스터에 데이터를 브로드 캐스트하려면 은 드라이버이어야합니다. 따라서 collect()rdd을 방송하십시오.

JavaRDD<String> rdd = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt"); 

Broadcast<List<String>> broadcastVar = ctx.broadcast(rdd.collect()); 

collect() 그것이 OOM 예외를 던질 수있는 드라이버 전체 rdd을 가져올 것이다 유의하시기 바랍니다. 크기가 작은 데이터는 브로드 캐스트가 좋습니다.

+0

rdd.collectAsMap으로 rdd를 수집 할 수 있습니까? 또는지도의 목록으로 변환하는 다른 방법은 없습니까? – user4342532

+0

'rdd.collectAsMap'도 좋습니다. – mrsrinivas

+0

rdd.collectAsMap()이 보이지 않습니다. – user4342532

관련 문제