Apache Spark์ RDD(Resilient Distributed Dataset)๋ Spark์ ํต์ฌ ๋ฐ์ดํฐ ์ถ์ํ๋ก, ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ถ๋ณ์ฑ(immutable) ๋ฐ ๋ถ์ฐ(distributed) ๋ฐ์ดํฐ ๊ตฌ์กฐ์
๋๋ค. RDD๋ ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ํํ๊ณ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
RDD์ ์ฃผ์ ํน์ง
- Resilient (ํ๋ ฅ์ฑ)
- RDD๋ ์ฅ์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ ๋ณํ ๋ด์ญ(๊ณ๋ณด, lineage)์ ์ ์ฅํ๋ฉฐ, ์ผ๋ถ ํํฐ์
์ด ์์ค๋๋๋ผ๋ lineage๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์์ฑํ ์ ์์ต๋๋ค.
- Distributed (๋ถ์ฐ)
- RDD๋ ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ๋
ธ๋์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ณ์ฐ์ ๋ถ์ฐ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฐ ํํฐ์
์ ํด๋ฌ์คํฐ ๋ด ์์ปค ๋
ธ๋์ ๋ถ์ฐ๋์ด ์์
์ ๋ณ๋ ฌ๋ก ์คํ.
- Immutable (๋ถ๋ณ์ฑ)
- RDD๋ ์์ฑ ํ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๋ฐ์ดํฐ ๋ณํ์ ์๋ก์ด RDD๋ฅผ ์์ฑํฉ๋๋ค.
- ์ด๋ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- Lazy Evaluation (์ง์ฐ ํ๊ฐ)
- RDD ๋ณํ(transformations)์ ์ฆ์ ์คํ๋์ง ์๊ณ , ์คํ์ด ํ์ํ ๋(์: ์ก์
์ํ ์) ์ฐ์ฐ์ด ํ๊ฐ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด ์ต์ ํ๋ ์คํ ๊ณํ(DAG: Directed Acyclic Graph)์ด ์์ฑ๋ฉ๋๋ค.
- In-Memory Computing (๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ฐ์ฐ)
- RDD๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ I/O ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํต๋๋ค.
- ๋์คํฌ ๊ธฐ๋ฐ ์ฐ์ฐ๋ ์ง์.
RDD์ ์ฃผ์ ๊ตฌ์ฑ ์์
- ๋ฐ์ดํฐ ๋ถํ (Partitions)
- RDD๋ ์ฌ๋ฌ ํํฐ์
์ผ๋ก ๋ถ๋ฆฌ๋๋ฉฐ, ๊ฐ ํํฐ์
์ ํด๋ฌ์คํฐ ๋
ธ๋์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ๋ณํ(Transformations)
- RDD์์ ์๋ก์ด RDD๋ฅผ ์์ฑํ๋ ์ฐ์ฐ์ผ๋ก, Lazy Evaluation์ ๋ฐ๋ฆ
๋๋ค.
- ์:
map
, filter
, flatMap
, distinct
, groupByKey
, reduceByKey
.
- ์ก์
(Actions)
- ๋ณํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ฌ์คํฐ์์ ์์งํ๊ฑฐ๋ ์ ์ฅํ๋ ์ฐ์ฐ์ผ๋ก, ์ฐ์ฐ์ ์คํํฉ๋๋ค.
- ์:
collect
, count
, reduce
, saveAsTextFile
, foreach
.
- ๊ณ๋ณด(Lineage)
- RDD๊ฐ ์์ฑ๋ ๋ณํ ๋ด์ญ์ ์ถ์ ํ์ฌ ์ฅ์ ์ ๋ฐ์ดํฐ ๋ณต๊ตฌ์ ์ฌ์ฉ.
RDD ์์ฑ ๋ฐฉ๋ฒ
- ์ธ๋ถ ๋ฐ์ดํฐ ๋ก๋
- ์ปฌ๋ ์
์์ ๋ณํ
- ๋ณํ์ ํตํ ์์ฑ
RDD์ Transformations ์์
์ฐ์ฐ |
์ค๋ช
|
์์ |
map |
๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ํจ์๋ฅผ ์ ์ฉ |
rdd.map(lambda x: x * 2) |
filter |
์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ง ์ ํ |
rdd.filter(lambda x: x > 10) |
flatMap |
๊ฐ ์
๋ ฅ ์์๋ฅผ ์ฌ๋ฌ ์ถ๋ ฅ ์์๋ก ๋งคํ |
rdd.flatMap(lambda x: x.split(" ")) |
distinct |
์ค๋ณต์ ์ ๊ฑฐ |
rdd.distinct() |
reduceByKey |
๋์ผ ํค๋ฅผ ๊ฐ์ง ์์๋ค์ ์ง์ ๋ ํจ์๋ก ๋ณํฉ |
rdd.reduceByKey(lambda x, y: x + y) |
join |
๋ RDD๋ฅผ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ |
rdd1.join(rdd2) |
RDD์ Actions ์์
์ฐ์ฐ |
์ค๋ช
|
์์ |
collect |
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋๋ผ์ด๋ฒ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฐํ |
rdd.collect() |
count |
RDD์ ์์ ๊ฐ์๋ฅผ ๋ฐํ |
rdd.count() |
reduce |
์ฃผ์ด์ง ํจ์๋ฅผ ์ฌ์ฉํด RDD์ ๋ชจ๋ ์์๋ฅผ ๋ณํฉ |
rdd.reduce(lambda x, y: x + y) |
take |
์์ N๊ฐ์ ์์๋ฅผ ๋ฐํ |
rdd.take(10) |
saveAsTextFile |
๋ฐ์ดํฐ๋ฅผ ํ
์คํธ ํ์ผ๋ก ์ ์ฅ |
rdd.saveAsTextFile("output/path") |
RDD์ ์ฅ๋จ์
์ฅ์
- ์ ์ฐ์ฑ: ๋ฐ์ดํฐ์ ๋ค์ํ ๋ณํ ๋ฐ ์ก์
์ง์.
- ํ์ฅ์ฑ: ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ถ์ฐ ์ฒ๋ฆฌ.
- ์ฅ์ ๋ณต๊ตฌ: ๊ณ๋ณด๋ฅผ ํตํ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ.
๋จ์
- ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋: ํฐ ๋ฐ์ดํฐ์
์ ์ฒ๋ฆฌํ ๋ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ํผ.
- ๋ณต์ก์ฑ: ๊ณ ์์ค API(DataFrame, Dataset)์ ๋นํด ์ฌ์ฉ๋ฒ์ด ๋ณต์ก.
- ์ต์ ํ ํ๊ณ: DataFrame/Dataset์ ๋นํด ์คํ ์ต์ ํ๊ฐ ์ ํ์ .
RDD์ DataFrame/Dataset์ ๋น๊ต
ํน์ง |
RDD |
DataFrame |
Dataset |
๋ฐ์ดํฐ ์ถ์ํ ์์ค |
์ ์์ค (Row-by-Row ์ฐ์ฐ) |
๊ณ ์์ค (์คํค๋ง ๊ธฐ๋ฐ) |
๊ณ ์์ค (์คํค๋ง ๊ธฐ๋ฐ + ํ์
์ธ์ดํ) |
์ต์ ํ |
์ ํ์ (RDD ๊ณ๋ณด ์ฌ์ฉ) |
Catalyst Optimizer ์ฌ์ฉ |
Catalyst Optimizer ์ฌ์ฉ |
์ ํ |
Java/Python ๊ฐ์ฒด |
Row ๊ฐ์ฒด |
์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด |
ํผํฌ๋จผ์ค |
๋๋ฆผ |
๋น ๋ฆ |
๋น ๋ฆ |