2017-04-10 9 views
2

이 조각 [*]에서 찾아 보게한다 "결합"RDD 지원 스파크하지 않습니다

val la = List(Array(2, 3, 5), Array(7, 11, 13)) 
la.flatten 

반환 이제

res1: List[Int] = List(2, 3, 5, 7, 11, 13) 

을, 나는 스파크와 함께 놀았 던 내가 발견 문제가있을 때. 코드 조각 : 오른쪽 측 표현 유형에 RDD[Array[String]]

처럼 그대로

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) map (_.split("\n")) 

컴파일하지 않습니다 [*], 나는 트릭 할 것 평평하게 생각했다

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatten 

을 그러나 RDD은이 작업을 제공하지 않습니다. 내 질문은 여기로

  1. flatten을 지원하지 않는 RDD이면의 (설계) 이유는 무엇입니까?
  2. RDD 작동 방식에 대한 중요한 부분을 놓치고 있습니까?

P. 난 그냥 내가

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatMap(x => x) 

답변

4

현재지도 대신 flatMap 사용하고자 원하는 것을 달성하기 위해 기존의 좋은 flatMap를 사용할 수 있음을 알고있다.

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) flatMap (_.split("\n")) 

텍스트 또한 파일이 이미 분할되어 있으므로 분할하지 않아도됩니다.

구현이 어렵고 동일한 효과를 내기 위해 을 사용할 수 있기 때문에 Flatten이 구현되지 않았습니다. 어쨌든 중복 될 것이기 때문에 구현할 가치가 없습니다. https://issues.apache.org/jira/browse/SPARK-18855을 참조하십시오.

+0

Thx! 위대한 발언. 문제가 내 질문에 대한 답변입니다. 아직도, 나는'평평한'이 중복 되는가'scala'가 그것을 제공하는 이유는 확신하지 못한다? 나는 다른 higher-order 함수가 있기 때문에 그것이 제공되어야한다고 생각한다. – GA1

+0

@ GA1 스칼라 컬렉션과 스파크는 다른 아이디어로 다른 팀에서 만들어졌으며 RDD는 일반 컬렉션과는 조금 다릅니다. 관련 문제를 읽고 요청을 링크하면 해당 시도가 시도 된 것을 알 수 있지만 devs에 따르면 구현하기가 어려우며 동일한 기능을 제공하는 플랫 맵 때문에 실제 이점이 없다고 생각하지 않습니다. 오히려 더 영향력있는 것에 자원을 투자하십시오. – puhlen