빅데이터

빅데이터_Chapter06_RDD

강용민 2022. 5. 11. 12:25

RDD(Resilient Distributed Dataset)

RDD는 스파크가 사용하는 핵심 데이터 모델로서 다수의 서버에 걸쳐 분산 방식으로 저장된 데이터 요소들의 집합이다.

병렬 처리가 가능하고 장애가 발생할 경우에도 스스로 복구될 수 있는 내성을 갖고 있다.

RDD에 속한 요소들은 파티션이라 하는 더 작은 단위로 나눠질 수 있는데, 스파크는 작업을 수행할 때 바로 이 파티션 단위로 나눠서 병렬로 처리를 수행한다.

즉, RDD는 분산 데이터 모델이며 내부에는 단위 데이터를 포함하고 있고 저장할 때는 여러 서버에 나누어 저장되며, 처리할 때는 각 서버에 저장된 데이터를 동시에 병렬로 처리할 수 있는 모델이다.

 

Databricks

Databricks는 Spark 기반의 분석 플레폼 서비스를 제공한다.

https://community.cloud.databricks.com/login.html 에서 계정을 등록 한 후 들어가는 첫 번째 페이지이다.

Spark는 분산병렬데이터 프로세싱으로 그림과 같이 Cluster, Table, Notebook로 나눌 수 있다.

Cluster은 코드를 돌리는 머신이며, Table은 사용할 데이터셋을 저장하는 스토리지, Notebook은 코드를 입력할 수 있는 창이다.

 

RDD 생성

일반적으로 RDD를 생성하는 두 가지 방법이 있는데, 외부 데이터 세트를 로드하거나 개체 컬랙션 집합을 배포하는 것이다.

from pyspark.sql import SparkSession

spark = SparkSession \
	.builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

#By using parallelize()
df = spark.sparkContext.paralleize([
	(1,2,3,'a b c'),
    (4,5,6,'d e f'),
    (7,8,9,'g h i')]).toDF(['col1', 'col2', 'col3', 'col4'])

df.show()

#By using createDataFrame()
Employee = spark.createDataFrame([
	('1', 'Joe', '70000', '1'),
    ('2', 'Henry', '80000', '2'),
    ('3', 'Sam', '60000', '2'),
    ('4', 'Max', '90000', '1')],
    ['Id', 'Name', 'Sallary', 'DepartmentId'])
    
#By using read() and load()
#Read dataset from .csv file
df = spark.read.format('com.databricks.spark.csv'). \
	options(headr='true', \
    inferschema='true'). \
    load("/home/feng/Spark/Code/data/Advertising.csv", \
    header=True)
df.show(5)
df.printSchema()

#Read dataset from HDFS
from pyspark.conf import sparkConf
from pyspark.context import SparkContext
from pyspark.sql import HiveContext

sc = SparkContext('local', 'example')
hc = HiveContext(sc)
tf1 = sc.textFile("hdfs://cdhstltest/user/data/demo.CSV")
print(tf1.first())

hc.sql('use intg_cme_w")
spf = hc.sql('SELECT * FROM spf LIMIT 100")
print(spf.show(5))

 

Spark Operations

Spark Operation에는 Transformations 및 Actions 두가지 주요 유형이 있다.

Spark Transformations는 이전 RDD에서 새 RDD를 구성한다. 예를 들어, 한 가지 일반적인 변환은 조건자와 일치하는 데이터를 필터링하는 것이다.

반면에 Spark Action은 RDD를 기반으로 결과를 계산하고 이를 Driver 프로그램으로 반환하거나 외부 스토리지 시스템(예: HDFS)에 저장한다.

 

 

[참조]

https://brocess.tistory.com/182

https://kimdingko-world.tistory.com/259