공부하는 블로그

Spark의 RDD 의 문제점 본문

Develop/Spark

Spark의 RDD 의 문제점

모아&모지리 2017. 11. 16. 16:55

Spark의 RDD 의 문제점

매 Job(종단 함수)마다, 파일 읽는 작업부터 시작함 -> 파일에 변화가 없음에도, 매번 파일을 읽어 비효율적인 처리가 이루어진다.

그래서 RDD 영속화를 통해 파일을 읽은 DDD를 메모리 또는 디스크에 보존한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 
// 연도와 선수 기준 그룹하기
eraRecord.groupBy(tuple -> new Tuple2<>(tuple._2(), tuple._1()))
  // ((1907,clarkwa01),[(clarkwa01,1907,6.23), (clarkwa01,1907,1.99)])
  .map(tuple -> {
   String year = tuple._1._1;
   String playerID = tuple._1._2;
   
   double averageEra = StreamSupport.stream(tuple._2.spliterator(), true)
     
   averageEra = Math.round(averageEra * 100/ 100;
   
   return new Tuple3<>(playerID, year, averageEra);
  })
  .collect()
  .stream()
  .sorted((tuple1, tuple2) -> {
   int playerSort = tuple1._1().compareTo(tuple2._1());
   return playerSort != 0 ? playerSort : tuple1._2().compareTo(tuple2._2());
  })
  .forEach(System.out::println);
 
// Java 8 에서 GroupBy 하기
.collect(
 Collectors.groupingBy(tuple1 -> tuple1._1)
)
 
// Group by 후에 Iterable 이 된 value 를 다시 Stream 으로 바꾸기
StreamSupport.stream(tuple._2.spliterator(), true)
 
// Group by 후에 Iterable 이 된 value 를 다시 List 로 바꾸기
List<Tuple4<Integer, StringString, Integer>> list = new ArrayList<>();
  iter.spliterator().forEachRemaining(list::add);
 
// JavaRDD 를 JavaPairRDD 로 바꾸기
.mapToPair(tuple -> tuple)
 
// JavaPairRdd 를 flatMap 하기
.flatMapValues(iter -> {
 List<Tuple4<Integer, StringString, Integer>> list = new ArrayList<>();
  iter.spliterator().forEachRemaining(list::add);
  return list;
})
 
cs

'Develop > Spark' 카테고리의 다른 글

Spark 9일차  (0) 2017.11.16
Kafka 와 Zookeeper 설치하기  (0) 2017.11.16
Spark 예제 1  (0) 2017.11.16
Apache spark 소개 및 실습(시작하기)  (0) 2017.11.16
Spark 예제 0  (0) 2017.11.07