나는 (사용자 ID, 이름, 개수) 타입의 튜플 목록을 가지고있다. 예를 들어아파치 스파크 (스칼라)에서 reduceByKey 사용
, 나는 각 요소 이름이 계산되는 유형이 컬렉션을 줄이기 위해 시도하고있어
val x = sc.parallelize(List(
("a", "b", 1),
("a", "b", 1),
("c", "b", 1),
("a", "d", 1))
)
.
그래서 위의 발 X에있는 변환됩니다 :
val byKey = x.map({case (id,uri,count) => (id,uri)->count})
val grouped = byKey.groupByKey
val count = grouped.map{case ((id,uri),count) => ((id),(uri,count.sum))}
val grouped2: org.apache.spark.rdd.RDD[(String, Seq[(String, Int)])] = count.groupByKey
grouped2.foreach(println)
나는 그것이 GroupByKey에서보다 더 빠르게 수행으로 reduceByKey를 사용하려고 해요 : 여기
(a,ArrayBuffer((d,1), (b,2)))
(c,ArrayBuffer((b,1)))
내가 현재 사용하고있는 코드입니다.
에 동일한 매핑을 제공하려면 위 코드 대신 reduceByKey를 어떻게 구현할 수 있습니까?
val byKey = x.map({case (id,uri,count) => (id,uri)->count})
당신은 할 수 : 코드에 따라
기본적으로 reduceByKey는 groupBy를 수행 한 다음 사용자 정의 reduce 함수를 적용한 것과 같은 결과를 얻습니까? – Savvas
@Savvas 최종 결과는 동일하지만'reduceByKey'는 실행 프로그램 당 O (1) 메모리 요구 사항을 가지지 만'groupByKey'는 OOM으로 이어질 수있는 모든 그룹화 된 값을 메모리에 유지해야합니다. – maasg