[SCALA] 스파크 RDD의 배 방법의 설명
SCALA스파크 RDD의 배 방법의 설명
나는 사전 구축 하둡 - 2.4 (로컬 모드)에 대한 스파크-1.4.0가 DoubleRDD의 제곱의 합을 계산하기 위해 실행하고 있습니다. 내 스칼라 코드를 보이는 등
sc.parallelize(Array(2., 3.)).fold(0.0)((p, v) => p+v*v)
그리고 그것은 놀라운 결과 97.0했다.
이 배의 스칼라 버전에 비해 상당히 직관적이다
Array(2., 3.).fold(0.0)((p, v) => p+v*v)
이는 예상 답변을 13.0를 제공합니다.
이 때문에 이해의 부족으로 꽤 가능성이 나는 코드의 일부 까다로운 실수를 한 것 같다. I는 I가 1 파티션의 수를 변경하는 경우, 그렇지 않으면 결과, 파티션 등 그래서 예에 따라 달라질 수 RDD.fold 사용되는 함수 ()가 소통되어야하는 방법에 대해 읽고
sc.parallelize(Array(2., 3.), 1).fold(0.0)((p, v) => p+v*v)
코드는 나에게 내 컴퓨터에 169.0을 줄 것이다!
누군가가 정확히 여기 무슨 일이 일어나고 있는지 설명 할 수 있습니까?
해결법
-
==============================
1.음, 실제로 꽤 잘 공식 문서에 의해 설명되어 있습니다 :
음, 실제로 꽤 잘 공식 문서에 의해 설명되어 있습니다 :
단계에 의해 단계에 무슨 일이 일어나고 있는지 시뮬레이션을 시도 할 수 있습니다 무슨 일이 일어나고 있는지 설명하기 :
val rdd = sc.parallelize(Array(2., 3.)) val byPartition = rdd.mapPartitions( iter => Array(iter.fold(0.0)((p, v) => (p + v * v))).toIterator).collect()
그것은이 Array 우리에게 비슷한 제공 [더블] = 배열 (0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 9.0) 및
byPartition.reduce((p, v) => (p + v * v))
반환 97
참고로 중요한 것은 결과 파티션이 결합 된 순서에 따라 실행하는 실행과 다를 수 있다는 것입니다.
from https://stackoverflow.com/questions/31476635/explanation-of-fold-method-of-spark-rdd by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 시계열 스파크에서 작성 격차 (0) | 2019.11.07 |
---|---|
[SCALA] 어떻게 수동으로 TypeTag를 만드는 방법? (0) | 2019.11.07 |
[SCALA] TimeoutException을 수신 가능한 이유는 무엇입니까 : 선물은 [n 초] 후 시간 초과 스파크로 작업 할 때 [중복] (0) | 2019.11.07 |
[SCALA] 암시 적 변환의 결과 유형은 AnyRef보다 더 구체적이어야합니다 (0) | 2019.11.07 |
[SCALA] 왜 SimpleDateFormat의 잘못된 날짜를 구문 분석 하는가? (0) | 2019.11.07 |