일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로그래머스 큰 수 만들기
- 프로그래머스
- 프로그래머스힙
- 데이터파이프라인
- 하둡
- 빌드도구
- 카프카
- 데이터 수집
- ORACLE MSSQL차이
- 스파크
- Databricks
- 하둡에코시스템
- 데이터엔지니어링
- 하둡1.0
- 런타임데이터영역
- 데이터베이스복사
- 문맥교환
- Catalyst Optimizer
- Spark
- 서버간 복사
- EMR 구조
- 지연연산
- freenom
- kafka 설치
- AWS Crawler
- ORACLE문법
- 실행엔진
- lazy evaluation
- 하둡2.0
- Spark 최적화
- Today
- Total
목록DataEngineering/SPARK (12)
띵유로그
SPARK의 DATAFRAME은 비타입형, DATASET은 타입형입니다. DATAFRAME DATAFRAME이 비타입형이라고 하는데에 무리가 있을 수 있겠지만, 포인트는 데이터타입이 런타임에 결정된다는 것입니다. DATAFRAME은 ROW type으로 구성된 DATASET입니다. ROW는 연산에 최적화 된 인메모리 포맷입니다. 가비지컬렉션 등 추가로 관리가 필요한 jvm 의 타입이 아니라 연산이 효율적입니다. DATASET DATASET은 타입형입니다. 컴파일시간에 데이터타입이 결정됩니다. JVM 기반 언어이기 때문에 스칼라, 자바에서만 지원하고 python 등에서는 dataset을 쓸 수 없습니다. dataset을 사용하려면 스칼라-case class /자바 - Bean을 통해서 만들 수 있습니다. 컴..
이번 글에서는 효율적인 코드 작성을 위한 스파크 튜닝 방법에 대해서 정리해보겠습니다. 1. 파티셔닝 사용 적절한 파티션의 개수를 두어 데이터의 분포를 적절하게 하는것이 중요합니다. 한 파티션에 너무 많은 데이터가 들어간다면, 처리하는데 비용이 너무 많이 들것이고 적은 데이터를 가진 파티션들이 너무 많다면 스케쥴링하는데에 비용이 많이 들것입니다. 또 모든 메타데이터를 저장하고 있어야합니다. 예를들어 RDD를 filter 하고 난 후에는 파티션별로 데이터의 양이 상이할 수 있습니다. 이때 repartition을 해주어서 데이터를 재분배해주는 것이 좋습니다. 2. 캐싱 RDD는 액션함수가 실행될 때마다 데이터로드부터 다시 계산됩니다. 그래서 동일한 RDD를 가지고 여러번의 연산을 해야할 때는 중복실행을 줄이기..

스파크의 기본 아키텍쳐에 대해 알아보겠습니다. 스파크는 컴퓨터의 리소스를 관리하는 Cluster Manger와 그 위에 동작하는 Spark application으로 구성되어있습니다. 1. 클러스터 매니져 클러스터 매니져는 스파크 어플리케이션의 리소스를 효율적으로 분배하는 역할을 합니다. 스파크는 태스크를 할당하기 위해 클러스터 매니져에 의존합니다. 할당가능한 excutor를 전달받으면 그대로 할당하는 역할만을 수행하기 때문에 매우 중요합니다. 클러스터 매니져는 스파크와 떼었다 붙일 수있고 3.0기준으로 스파크 standalone 클러스터 매니저, 하둡 YARN, 메소스, Kubernetes 등이 사용가능합니다. 각 종류에 대해 잘 정리되어있는 글이 있어 남겨둡니다. https://paranwater.ti..
scala repl에서 caseclass 를 정의하려고 하니 다음과 같은 에러가 난다. case class XXXX(변수명1: String, 변수명2: String, is_regex: String) java.lang.NoSuchMethodError: scala.reflect.internal.Definitions$definitions$.classExistentialType(Lscala/reflect/internal/Symbols$Symbol;)Lscala/reflect/internal/Types$Type; at scala.tools.nsc.typechecker.SyntheticMethods$$anonfun$canEqualMethod$1$1.apply(SyntheticMethods.scala:147) at ..
RDD print 할때는 collect 한 후 foreach를 통해서 print 해야함 val test = ~~~ test.collect().foreach(println)

앞선 글에서 SPARK의 lazy evaluation과 in-memory등의 특성을 설명했다. 그렇다면 이러한 특성은 왜 유용할까? 어디에 유용할 까? 수많은 machine learning 알고리즘이 있지만, 대부분의 알고리즘은 iteration 에 기반한다. 여러 데이터를 가지고 반복작업을 하면서 최적화시키는 과정을 거친다. 여기서 SPARK 가 유용한 이유를 설명할 수 있다. 위 그림을 살펴보면 하둡은 각 작업이 끝난 후 disk에 저장하는 작업을 반복한다. 반면 SPARK 는 각 작업 후 결과를 memory 에 저장후 다시 활용한다. 즉, iteration이 많은 data science 에서는 매번 disk에 접근하는 하둡보다 spark가 훨씬 효율적인 것이다. SPARK에서 메모리에 저장해두고 바..
스칼라에서 암시적 변환을 하는 것 처럼 스파크에서도 암시적 변환이 일어난다. RDD가 Double 객체만 포함한다면 org.apache.spark.rdd.DoubleRDDFunctions 클래스의 객체로 자동변환되어 double RDD 함수를 추가로 제공한다. 1. 기초 통계량 계산 이전에 만든 Int array로 아래와 같이 계산한다. scala > intIds.mean Double = 44.785714285714285 scala > intIds.sum Double = 627.0 Int 객체가 Double객체로 자동변환되어 double RDD함수가 암시적으로 적용됨. stats 행동연산자도 있는데 한번의 호출로 전체개수, 합계 평균, 최댓값, 최솟값, 분산, 표준편차를 계산한다. variance와 st..
1. sample 연산자 호출된 RDD에서 무작위로 요소를 뽑아 새로운 RDD를 만드는 변환 연산자. withReplacement 인자를 false로 지정하면 메서드 호출이 끝날 때까지 다음 샘플링대상에서 제외한다. 즉, 복원(replace)하기 않고 제거됨. (복원 샘플링과 비복원 샘플링) 두번째 인자인 fraction은 각 요소가 샘플링될 횟수의 기댓값이다. 비복원 샘플링에서는 각 요소가 샘플링기대확률을 나타냄 이전 게시글에서 주문 고객 ID리스트를 만들었으니 그 예제를 다시 사용해본다. scala > val s = uniqueIds.sample(false, 0.3) scala > s.count 의 결과가 2일수도,1일수도, 3일 수도 있다. 왜냐하면 앞서 언급했듯이 fraction 값은 각 요소가 ..