hadoop(8)
-
[SparkSQL] UDF 개념 및 코드
UDF User Define Function. 즉, 사용자 지정 함수를 말한다. 앞선 포스팅에서 데이터 프레임을 처리하는 여러 함수들을 보았다. SparkSQL에선 사용자가 직접 어떤 작업을 수행하는 함수를 명명하고, Spark에 등록하여 쓸 수 있다. 자세하게 알아보자. "본 포스팅은 패스트캠퍼스의 강의를 듣고, 정리한 자료임을 밝힙니다." Basic Setting import os import findspark findspark.init(os.environ.get("SPARK_HOME")) import pyspark from pyspark import SparkConf, SparkContext import pandas as pd import faulthandler faulthandler.enable(..
2022.05.08 -
[SparkSQL] DataFrame 다루기
DataFrame SparkSQL에서 다루는 Structured Data로 아주 주요 개념이다. 기본적으로 Lazy Execution, 분산, Immutable이란 RDD의 장점을 가짐과 동시에 구조화(Structured)되어 있어 자동 최적화까지 가능하다. CSV, JSON, Hive 등으로 읽거나 변환도 가능하다. 본격적으로 DataFrame을 다뤄보자. "본 포스팅은 패스트캠퍼스의 강의를 듣고, 정리한 자료임을 밝힙니다." Basic Setting import os import findspark findspark.init(os.environ.get("SPARK_HOME")) import pyspark from pyspark import SparkConf, SparkContext import pand..
2022.05.07 -
[Spark] Reduction 개념 및 코드
Reduction 요소들을 모아서 하나로 합치는 작업을 말한다. 많은 Spark 연산들이 Reduction이라고 봐도 무방하다. * 파일 저장, collect() 등과 같이 Reduction이 아닌 액션도 존재. 코드로 실습해보자. conf 설정 import os import findspark findspark.init(os.environ.get('SPARK_HOME')) import pyspark from pyspark import SparkConf, SparkContext import pandas as pd import faulthandler faulthandler.enable() conf = SparkConf().setMaster('local').setAppName('my-RDD-transforma..
2022.05.01 -
[Spark] Spark 속도 최적화, Cashe() & Persist()
Spark 속도를 최적화시키는 방법으론, Cashe(), Persist()가 있다. Spark 특성상, Transformations는 Lazy Execution 방식으로 작업을 수행한다. 그 이유는, Eager Execution(즉시 시행)을 따를 경우 다음과 같은 비효율이 발생한다. Task를 수행할 때마다 Disk에 저장을 하고, 다시 이를 불러들여야 한다. 이 과정에서 Disk 공간은 물론, 통신으로 인한 속도 저하 등 비효율이 발생하게 된다. 그렇다면 Lazy Execution 방식으로 작업을 수행한다면 어떨까? Lazy Execution 방식이라면, Disk에 저장하지 않는다. 대신 Task에서 Task로 전달될 때 In-Memory 방식으로 데이터를 주고받을 수 있다. In-Memory 방식으..
2022.05.01 -
[Spark] Transformations & Actions 함수
Spark Operation = Transformations + Actions Tranformations는 결괏값으로 새로운 RDD를 반환하고, Lazy Execution을 한다는 점이 특징이다. Actions는 결괏값을 연산하여 출력하거나 저장하며, Eager Execution을 한다는 점이 특징이다. Transformations와 Actions 함수들을 더 자세히 살펴보자. conf 설정 import os import findspark findspark.init(os.environ.get('SPARK_HOME')) import pyspark from pyspark import SparkConf, SparkContext import pandas as pd import faulthandler faulth..
2022.05.01 -
[Spark] 분산/병렬 처리할 때 주의할 점
앞 포스팅에서 언급했듯이, Spark는 분산/병렬 처리를 지원한다. 하지만 분산/병렬 처리가 된다고 마냥 믿고 쓰기만 해서는 안된다. 분산/병렬 처리의 성능을 올리고, 비용을 줄이기 위해선 생각해줘야 할 것들이 몇몇 있다. 지금부터 그 요소들을 살펴보고 어떻게 코딩해야 할지 방향을 짚어보자. Distributed Data-Parallel 먼저 Spark의 핵심인 'Distributed Data-Parallel'에 대해서 알아보자. 분산된 환경에서의 병렬 처리란? 1) 데이터를 여러 개로 나누어 여러 노드로 보낸다. 2) 각 노드에서 독립적으로 task를 시행. 3) 각자 만든 결괏값을 합친다. 이 일련의 과정이 분산된 환경에서의 병렬 처리이며, 그림으로 표현하면 다음과 같다. Spark를 처음 접한다면,..
2022.05.01