Spark 내부에서 발생하는 지저분한(?) 일들을 추상적으로 표현한 것
→ 즉, 작업을 클러스터에 고르게 ‘분산’하고 실패가 발생하더라도 ‘회복’할 수 있으며, 사용자에게는 결국 ‘데이터 셋’처럼 보인다는 점에서 만들어진 이름.
RDD 오브젝트는 ‘Key-Value’ 정보나 일반적인 정보를 저장하는 수단이고, 클러스터에서 알아서 작업함
따라서, 프로그래밍 관점에선 RDD는 그냥 ‘데이터 셋’임 (내부적으로야 회복성도 고려하고, 분산도 고려하지만, 이를 사용자가 고려하진 않아도 됨)
sc
라는 오브젝트를 대화형으로 만드는 spark-shell
도 있고
독립적인 스크립트를 사용해서 SparkContext
를 스케줄에 따라 생성할 수도 있음
nums = parallelize([1, 2, 3, 4])
# HDFS, AWS S3, File 등등에서 textFile을 불러올 수도 있음
sc.textFile("hdfs://xxx")
# hive context를 활용해 hive로 SQL 쿼리를 날릴 수도 있음
hiveCtx = HiveContext(sc); rows = hiveCtx.sql("SELECT name, age FROM users")
우리가 생각할 수 있는 대부분의 데이터 소스를 가지고 RDD를 만들 수 있음!
RDD를 가지고 할 수 있는 것? → MapReduce에서 했던 Mapping, Reducing 작업을 할 수 있음.
rdd = sc.parallelize([1, 2, 3, 4])
squaredRDD = rdd.map(lambda x: x*x)
-> 1, 4 ,9 , 16