2017-09-30 2 views
1

각 rdd의 각 요소를 새 목록에 저장하려고합니다. 나는 을 인쇄 할 수 있습니다.을 입력 할 수 있지만, 은 요소을 목록에 저장하지 않거나 문자열 변수를 포함 할 수 없습니다.각 RDD의 각 요소를 새 목록에 저장

val arr = new ArrayBuffer[String](); 
    var hashtags_pair = hashtags.foreachRDD(rdd => 
    rdd.foreach(l => l.foreach(x => arr += x._1))) 

이어서 인쇄 값 아웃 :

arr.foreach(println) // Not working 

그러나 때 같은 요소 저장할 때 지금

... 
    var hashtags = joined_d.map(x => ((x._1, x._2._1._1, x._2._2, 
    x._2._1._4), 
    getHashTags(x._2._1._4))). 
    transform(rdd => rdd.map{case (x, list) => if(list.length > 0) 
    list.map(k => (k, (x._1, x._2, x._3, x._4, 1))) 
    else List((x._1.toString, (x._1, x._2, x._3, x._4, 0))) }) 

:

아래는 코드이며 발을 인쇄하다 단말은 바로 을 저장하지 않고 그것을 좋아 :

var hashtags_pair = hashtags.foreachRDD(rdd => 
rdd.foreach(l => l.foreach(x => println(x._1))) // It's working 

답변

1

은 아니 당신은 배열에 맵의 출력을 저장할 수 없습니다. 그 이유는 RDD가 분산 데이터 셋이고 서로 다른 실행 프로그램에서 맵 작업을 병렬로 실행하기 때문입니다. 이제 드라이버는 실행을 위해 Executor에게 map 연산의 종료만을 보냅니다.

선언 된 배열 변수는 드라이버의 로컬 변수이며 모든 실행 프로그램에 보낼 수 없습니다.

+0

설명해 주셔서 감사합니다. –

관련 문제