일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lazy evaluation
- 지연연산
- 스파크
- 하둡2.0
- 데이터 수집
- Spark
- 데이터베이스복사
- 하둡에코시스템
- Catalyst Optimizer
- 하둡
- Spark 최적화
- AWS Crawler
- ORACLE MSSQL차이
- freenom
- 프로그래머스 큰 수 만들기
- 서버간 복사
- 카프카
- 실행엔진
- 빌드도구
- 문맥교환
- 프로그래머스
- 데이터파이프라인
- Databricks
- 하둡1.0
- 런타임데이터영역
- ORACLE문법
- kafka 설치
- EMR 구조
- 데이터엔지니어링
- 프로그래머스힙
- Today
- Total
띵유로그
[스파크] RDD 개요 본문
RDD에 대해서는 지난 글에서도 간단히 살펴보았다.
https://thing-u.tistory.com/25?category=909947
이번 글에서는 RDD의 함수와 사용 방법을 알아보려한다.
map, flatMap, filter, reduce등의 고차원 함수를 제공한다. 다음은 RDD클래스를 간단히 나타내본 코드이다.
abstract class RDD[T]{
def map[U](f:T=>U) :RDD[U]= ....
def flatMap[U](f:T=>TraversableOnce[U]):RDD[U]= ...
def filter(f:T =>Boolean) : RDD[T]=...
def reduce(f:(T,T)=>T):T = ...
def fold(f: T)(op:(T,T) =>T) : T
def aggregate[U](z:U)(seqop:(U,T) => U, combop:(U,U) =>U) : U
}
RDD 생성방법
1. 기존에 존재하던 RDD 를 transforming
2. SparkContext or SparkSession object 에서 만들기
- 함수 : parallelize : scala collection을 RDD로 변환
textFile : HDFS나 filesystem 에서 읽어서 RDD[string]으로 반환
[예시 맛보기]
1. 파일 READ
val licLines= sc.textFiles("/user/local/spark/LICENSE")
-> LICENSE 파일 내용을 개행문자로 분할하여 만든 문자열의 컬렉션.
licLines = RDD[String]
2. COUNT
val lineCnt = lincLines.count
-> licLines 컬렉션에 포함된 줄 개수를 반환
3. FILTER
val bsdLines = licLines.filter(line => line.contains("BSD"))
-> BSD 문자열이 등장한 줄만 포함하는 컬렉션
bsdLines.count
-> 줄개수
3-1
* 기명함수를 사용하기
def isBSD(line: String) = {line.contains("BSD")}
val isBSD= (line:String)=>line.contains("BSD")
val bsdLines1 = licLines.filter(isBSD)
bsdLines1.count
4.
bsdLine.foreach(bLine => println(bLine))
혹은 bsdLines.foreach(println)
RDD의 특징?
1) 불변성 : read only이다. 데이터를 조작할 때 새로운 RDD를 만들어 낼 뿐. 기존의 RDD가 변경되지않음.
2) 복원성 : 불변성을 가지기 때문에 이전 상태로 복원이 가능하다.
3) 분산 : 여러군데에 저장된 데이터들이 모여 하나의 RDD를 만든다.
복원성에 대해 조금 더 자세히 말해보자면,
스파크에서는 해당 데이터셋을 만드는데 사용된 변환 연산자 로그를 남긴다. 일부 노드에 장애가 발생한다면 이 로그를 이용해서 데이터셋을 다시 계산해 RDD를 복원한다.
'DataEngineering > SPARK' 카테고리의 다른 글
[스파크] RDD - Double RDD 전용 함수 (0) | 2021.03.08 |
---|---|
[스파크]RDD연산자2(sample, take, takeSample) (0) | 2021.03.08 |
[스파크] RDD연산자 (0) | 2021.03.08 |
[SPARK] SPARK DATAFRAME이란 - RDD와 어떻게 다른가? (0) | 2020.12.06 |
[SPARK] SPARK - ORIENTATION (0) | 2020.11.25 |