728x90 scala7 [Spark] 프로그래밍 언어 별 Spark 성능, 속도 차이 (UDF와 직렬화) Spark에서는 지원할 수 있는 언어가 5(7)가지가 있습니다.ScalaPythonJavaRSQLGO (4.x version 부터 지원)Rush(4.x version 부터 지원)관련하여 속도 차이는 어떤지 비교하고 왜 속도 차이가 나는지 정리해보겠습니다.1. Catalyst Optimizer와 Tungsten 엔진 사용Spark는 Catalyst Optimizer라는 내부 최적화 엔진을 사용하여, DataFrame, Dataset, 그리고 Spark SQL 쿼리를 모두 동일한 논리적 실행 계획(Logical Plan)으로 변환 Catalyst Optimizer는 쿼리 최적화, 필터 푸시다운, 프로젝트 제거, 조인 최적화 등을 수행최적화된 논리적 계획은물리적 실행 계획(Physical Plan)으로 변환되.. 2025. 1. 10. [Spark] Scala Spark 앱 만들기 (feat. Intellij) 이직을 하게 되면서 python이 아닌, scala 언어로 Spark을 돌리고 있었습니다. 언젠가는 scala를 배워봐야지 생각만 했었는데, 생각보다 기회가 앞당겨진 것 같아, 요즘 열심히 scala 언어를 공부하고 있는 중입니다. 그래서 이번 포스트에는 scala언어로 spark앱을 만들고, jar파일로 만들어 보겠습니다. 1. 프로젝트 생성 스칼라 새 프로젝트 생성 build 시스템은 sbt로 지정 settings에서 scala plugins생성 . ├── build.sbt # MergeStrategy.discard case x if x.endsWith("modlue-info.class") => MergeStrategy.discard case x => val oldStrategy = (assembly.. 2023. 6. 17. [Scala] 스칼라 배우기 5. 스칼라 기본 문법4(trait, singleton object) Trait(트레잇)트레잇(trait)은 자바의 인터페이스와 유사메소드를 정의만 해놓을 수도 있고, 기본 구현을 할 수도 있음추상 클래스와 달리 생성자 파라미터는 가질 수 없음트레잇에서는 가변 변수, 불변 변수 모두 선언 가능트레잇을 구현하는 클래스에서 가변 변수는 수정이 가능하지만, 불변 변수는 수정할 수 없음트레잇의 기본 메소드는 상속되고, override 키워드를 이용하여 메소드를 재정의 할 수 있음트레잇은 extends를 사용하여 상속가능하고, 여러개의 트레잇을 with 키워드로 동시에 구현 가능멤버변수를 가질 수는 없음추상클래스는 하나만 상속할 수 있지만, 트레잇은 여러개를 상속 할 수 있음생성자 멤버변수가 필요하면 추상클래스를 이용하는 것이 좋고, 멤버 변수가 필요 없다면 트레잇을 이용하는 것이.. 2023. 6. 11. [Scala] 스칼라 배우기 3. 스칼라 기본 문법2(함수) 함수(function) def으로 선언 함수를 선언할 때 리턴문과 리턴 타입은 생략이 가능하고, 매개변수의 파라미터 타입은 생략할 수 없음 리턴값이 없는 함수를 선언할 때는 Unit을 이용 함수의 매개변수는 불변 변수이기 때문에 재할당 할 수 없음 리턴 타입을 생략하면 컴파일러가 반환값을 이용하여 자동으로 추론 리턴문이 생략되고, 리턴 타입이 Unit이 아니면 함수의 마지막 값을 리턴 // 함수 선언 def add(x: Int, y: Int): Int = { return x + y } // x는 val 이기 때문에 변경 불가 def add(x: Int): Int = { x = 10 } // 리턴 타입 생략 가능 def add(x: Int, y: Double) = { x + y } // 리턴 타입이 Uni.. 2023. 5. 22. [Scala] 스칼라 배우기 2. 스칼라 기본 문법1(진입점, 객체, 자료형, 문자열, 변수) Scala의 진입점 싱글톤 객체(object)가 main 함수를 구현하는 방법 // main 함수를 생성App 을 상속하여 실행하는 방법 object S01_HelloWorldObject { def main(args: Array[String]): Unit = { println("Hello World main") } } 싱글톤 객체(object)가 App 트레잇을 상속하는 방법 App 트레잇을 상속하는 방법은 extends로 App 트레잇을 상속하고, 실행하고자 하는 코드를 작성하면 순차적으로 실행 object S01_HelloWorld extends App { println("Hello World") } App 트레잇이 내부적으로 main() 함수를 구현해 주기 때문에, 첫번째 방법과 동작 방식의 차이는.. 2023. 5. 14. [Scala] 스칼라 배우기 1. 스칼라란? 특징 및 스칼라 언어에 관한 통계 이번에 이직을 하게 되면서 스파크 코드가 python이 아닌 scala로 구성되어 있기 때문에 스칼라 언어를 배울 필요성을 느껴 스칼라언어에 대해 하나씩 배우면서 적용해 나갈 계획입니다. java와 닮은 점이 많은 언어 이기 때문에 java와 비교하며 같이 공부 해 나갈 계획이고 scala를 통해 spark프로그래밍도 적용 및 pyspark와 비교 해 볼 계획입니다. 1. Scala란? 2004년 마틴 오더스키(Martin Odersky)가 발표 일반적인 프로그래밍 패턴을 간결하고 우아하며 타입-세이프한 방식으로 표현할 수 있게 설계된 최신 멀티-패러다임 프로그래밍 언어 객체지향과 함수형 언어의 특징을 자연스럽게 통합한 언어(하이브리드 언어) 2. Scala 특징 1. 모든 값이 객체인 순수 객체지향 언.. 2023. 5. 13. [Spark] RDD vs DataFrame 큰 차이점, Dataframe을 사용해야 되는 이유, RDD를 사용해야 하는 경우는? RDD, Dataframe 다루기 RDD란? 정의 및 특징, dataframe과의 차이는?RDD(Resilient Distributed Dataset)특징설명ResilientRDD lineage 그래프를 통한 fault-tolerant가 빠졌거나,node의 실패로 인한 손상된 파티션을 다시 실행시킨다.Distributed클러스터의 여러 노드에 데이터가 분산되어 저장Dataset원천 데이터값 혹은 값의 값들로 이루어진 파티션된 collection 데이터(튜플 혹은 다른 레코드로써 사용될 수 있는 데이터 객체들)RDD 특징특징설명In-MemoryRDD속의 데이터는 가능한 많이, 오래 메모리에 저장되어 있다.불가변성(읽기 전용)한번 생성되고 나면 변하지 않는다. transformation 연산을 통해 새로운 RDD로써 만들 수 있다.lazy .. 2021. 12. 16. 이전 1 다음 728x90