pyspark
데이터가 메모리에 들어가게 되면 이는 작은 데이터(small data)로 바로 처리할 수 있는 반면, 데이터가 메모리에 들어가기 힘든 경우 파일시스템을 활용하거나, 데이터베이스를 사용한다. 데이터가 그럼에도 불구하고 크기가 큰 경우 데이터를 다수 컴퓨터로 구성된 클러스터(cluster)에 넣어 이를 처리한다.
빅데이터를 처리하기 위해서 스파크를 사용해서 클러스터를 구성해야 한다. 먼저 빅데이터 작업을 쪼개서 처리할 수 있도록 다수 노드(Node)로 구성된 클러스터를 구성한다. 다수 일감을 처리하도록 클러스터 관리자(cluster manager)를 통해 일감을 적절히 분배하여 처리하도록 구성한다. 그리고 나서 드라이버(drvier)를 통해 클러스터 관리자를 통제한다.
클러스터 구성 아키텍처
클러스터 구성 애니메이션
스파크(Spark)에 접속해서 빅데이터를 다루는데 크게 네가지 언어가 많이 사용된다.
자바는 일단 REPL 지원에서 기능이 떨어져 제외하고 스칼라/파이썬/R을 고수준(High-level) 언어로 추천한다. pyspark
기준으로 보면 각 기능별로 다음 모듈이 필요하다.
pyspark.sql
: 정형 데이터pyspark.streaming
: 시계열 스트리밍(streaming) 데이터pyspark.ml
혹은 pyspark.mllib
: 기계학습pyspark
헬로월드SparkSession
을 가져와서 로컬 클러스터를 하나 생성하고, 명칭을 hello_world_app
으로 삼는다. 그러고 나서 spark.stop()
명령어로 이를 멈춘다.
iris.csv
로컬 컴퓨터 파일 iris.csv
파일으로 불러와서 5줄만 찍어본다.
from pyspark.sql import SparkSession
spark = SparkSession.builder\
.master('local[*]')\
.appName('hello_world_app')\
.getOrCreate()
iris = spark.read.csv('data/iris.csv', header=True)
print(iris.show(5))
+------------+-----------+------------+-----------+-------+
|sepal.length|sepal.width|petal.length|petal.width|variety|
+------------+-----------+------------+-----------+-------+
| 5.1| 3.5| 1.4| .2| Setosa|
| 4.9| 3| 1.4| .2| Setosa|
| 4.7| 3.2| 1.3| .2| Setosa|
| 4.6| 3.1| 1.5| .2| Setosa|
| 5| 3.6| 1.4| .2| Setosa|
+------------+-----------+------------+-----------+-------+
only showing top 5 rows
None