Spark Key/Value Pairs
조대협
http://bcho.tistory.com
RDD에는 어떤 데이타 형식이라던지 저장이 가능한데, 그중에서 Pair RDD라는 RDD가 있다. 이 RDD는 Key-Value 형태로 데이타를 저장하기 때문에, 병렬 데이타 처리 부분에서 그룹핑과 같은 추가적인 기능을 사용할 수 있다.
예를 들어 reduceByKey 와 같이 특정 키를 중심으로 데이타 연산 (각 키 값 기반으로 합이나 평균을 구한다던가) key 기반으로 join 을 한다던가와 같은 그룹핑 연산에 유용하게 사용할 수 있다.
Pair RDD를 생성하는 방법은 다음과 같다.
Java
mapToPair나 flatMapToPair 라는 메서드를 사용하면 된다.
mapToPair등의 함수를 이용할때, 아래와 같이 람다 표현식을 사용하는 방식이 있고
RDD.mapToParis( d-> new Tuple2(key,value))
(d는 RDD에서 읽어오는 값. Key는 새로운 RDD를 생성할때, 해당 Tuple의 키값, value는 해당 Tuple의 Value값)
JavaRDD<String> lines = sc.textFile("data.txt");
JavaPairRDD<String, Integer> pairs = lines.mapToPair(s -> new Tuple2(s, 1));
또는 아래와 같이, Pair함수를 정의한 후에, Pair 함수를 mapToPair함수등에 넘기는 방법이 있다.
아래는 텍스트 라인에서 첫번째 단어를 Key로하고, 해당 라인을 Value로 하는 코드 예제이다.
PairFunction
<
String
,
String
,
String
>
keyData
=
new
PairFunction
<
String
,
String
,
String
>()
{
public
Tuple2
<
String
,
String
>
call
(
String
x
)
{
return
new
Tuple2
(
x
.
split
(
" "
)[
0
],
x
);
}
};
JavaPairRDD
<
String
,
String
>
pairs
=
lines
.
mapToPair
(
keyData
);
* Learning spark 코드 참조
Python
lines = sc.textFile("data.txt")
pairs = lines.map(lambda s: (s, 1))
counts = pairs.reduceByKey(lambda a, b: a + b)
'빅데이타 & 머신러닝 > 스트리밍 데이타 처리' 카테고리의 다른 글
실시간 빅데이타 처리를 위한 스트리밍 처리의 개념 (1) | 2016.07.04 |
---|---|
Apache Spark-Python vs Scala 성능 비교 (1) | 2015.06.09 |
Apache Spark - RDD (Resilient Distributed DataSet) Persistence (1) | 2015.05.31 |
Apache Spark - RDD (Resilient Distributed DataSet) 이해하기 - #2 (1) | 2015.05.26 |
Apache Spark - RDD (Resilient Distributed DataSet) 이해하기 - #1 (0) | 2015.05.22 |