SlideShare a Scribd company logo
1 of 19
1
빅 데이터 세미나
2016.01.18
강동현
spark SQL
2
목차
 Spark SQL 개요
 Tungsten execution engine
 Catalyst optimizer
 RDD, DataFrame
 Dataset
 Spark SQL application (in Java)
 Linking
 example
 참고 자료
3
Spark SQL
 정형/반정형 데이터(structured/semi-structured Data) 처리에 특화된
Spark Library
 Tungsten execution engine & Catalyst optimizer 기반
 다양한 interface 지원
 SQL, HiveSQL queries
 Dataframe API
 Scala, Java, Python, and R에서 사용 가능
 Spark 1.3
 Dataset API
 Scala, Java 에서 사용 가능
 Spark 1.6
 다양한 Input source를 지원
 RDD & 임시 테이블
 JSON 데이터 셋
 Parquet file
 Hive Table
 ODBC/JCBC 서버와의 연동
4
Tungsten execution engine
 스파크의 bottleneck은?
 I/O나 network bandwidth가 아님
 High bandwidth SSD & striped HDD의 등장
 10Gbps network의 등장
 CPU 와 memory에서 bottleneck 현상이 발생
 기본적인 processing workload와 함께
 Disk I/O를 최소화하기 위한 input data pruning workload
 Shuffle을 위한 serialization과 hashing이 특히 key bottleneck
 CPU와 memory의 효율을 높여야…
 하드웨어의 한계에 가깝게 성능을 뽑아올 수 있는 System Engine이 필요!
 Project Tungsten
 Spark 1.4부터 DataFrame에 적용
 spark 1.6에서 Dataset으로 확장
참고:
1. Project Tungsten – databrick
2. https://issues.apache.org/jira/browse/SPARK-7075
5
Tungsten execution engine – three Goal
 Memory Management and Binary Processing
 JVM object 모델과 garbage collection의 overhead가 큼
=>장기적으로 data를 저장할 경우 Java objects 보다는 binary format으로 저장
 메모리를 좀더 명확하게 관리할 필요가 있음
=> denser in-memory data format을 적용하여 메모리 사용률을 최소화 함
더 나은 memory accounting (size of bytes) 기술 적용(기존엔 Heuristics 기반)
 이를 기반으로 하면서 domain semantics을 최대한 반영한 data processing을 지원해야 함
=>binary format의 in memory data에 대해서도 data type을 이해하는 operator를 지원
(serialization/deserialization 없이 data processing)
 Cache-aware Computation
 sorting and hashing for aggregations, joins, and shuffle의 성능이 향상이 필요
=>memory hierarchy를 활용하는 algorithm과 data struncture
 Code Generation
 expression evaluation, DataFrame/SQL operators, serializer의 성능 향상이 필요
=>modern compilers and CPUs의 성능을 제대로 활용할 수 있는 code generation
6
Catalyst optimizer
 스칼라 함수형 프로그래밍 기법 특징을 살려 구현한 extensible optimizer
 extensible design
 새로운 optimization techniques과 feature들의 추가가 용이
 외부 개발자가 optimizer를 확장하여 사용하기 용이
 Catalyst의 구동 (In Spark SQL) ( 자세한 사항은 paper 참고)
 Tree 구조를 기반으로 optimization
 크게 4단계로 진행
그림 출처: Catalyst Optimizer - databrick
x+(1+2) 의 tree 예제 Catalyst의 phase
7
RDD, DataFrame
DataFrames / SQL
Structured Binary Data (Tungsten)
• High level relational operation 사용 가능
• Catalyst optimization 적용 가능
• Lower memory pressure
• Memory accounting (avoid OOMs)
• Faster sorting / hashing / serialization
RDDs
Collections of Native JVM Objects
• 로직 상에 특정 data type 표현이 용이
• Compile-time type-safety 보장
• 함수형 프로그래밍 가능
 두 타입 간의 변환은 지원 되지만..
 높은 변환 cost
 변환을 위한 boilerplate(표준 문안, 규칙) 숙지 필요
 둘의 장점을 합쳐놓은 API를 제공할 수 있을까?
 Catalyst optimizer & Tungsten execution engine의 장점을 활용할 수 있어야 함
 Domain object의 type을 이해할 수 있고 이를 활용할 수 있어야 함
성능 ↑안전성 & 유연성 ↑
8
Dataset
 RDD와 DataFrame의 장점만 취해 만든 interface API
 http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html
 특장점
 Fast
 Typesafe
 Support for a variety of object models
 Java Compatible
 Interoperates with DataFrames
Dataset
Structured Binary Data (Tungsten)
• High level relational operation 사용 가능
• Catalyst optimization 적용 가능
• Lower memory pressure
• Memory accounting (avoid OOMs)
• Faster sorting / hashing / serialization
• 로직 상에 특정 data type 표현이 용이
• Compile-time type-safety 보장
• 함수형 프로그래밍 가능
그림 출처: technicaltidbit.blogspot.kr/
9
Dataset
 Encoder
 Dataset은 테이블 형식의 Structured Binary data로 저장
 JVM object인 RDD는 물론, DataFrame과도 형태가 다름
 Processing 및 전송을 위해서는 serialization이 필요
 RDD/DataFrame type의 data를 Dataset으로 변경하기 위해서는
Object의 타입에 맞는 특별한 Encoder가 필요(반대 방향으로의 변환에도 동일)
 이전 버전까지 사용했던 java, kyro Serialization에 비해 성능 우수함
Data Serialization 성능 비교 그림 출처: Introducing Spark Datasets- databrick
10
Dataset
 structured/semi-structured Data 분석 => Dataset으로
구분 RDD DataFrame Dataset
성능 비교적 느림 빠름 빠름
메모리 관리 누수 존재 최적화 최적화
Type-safety 보장 보장되지 않음 보장
분석 확장성 유연함 제한적 유연함
RDD-Dataset의
WordCount 예제의
실행 시간 비교
RDD-Dataset의
캐싱 시 memory
사용량 비교
그림 출처: Introducing Spark Datasets- databrick
11
Spark SQL application (in Java)
 Linking
 Pom.xml에 박스 내용 추가
12
Spark SQL application (in Java)
 sample
examples/src/main/resources/people.json
examples/src/main/resources/people.txt
13
Spark SQL application (in Java)
 (DataFrame example 1) Jason File
SparkConf sparkConf = new SparkConf().setAppName("dataFrame");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx);
DataFrame df = sqlContext.read().json("examples/src/main/resources/people.json");
df.show();//1
df.printSchema();//2
df.select("name").show(); //3
df.select(df.col("name"), df.col("age").plus(1)).show(); //4
df.filter(df.col("age").gt(21)).show(); //5
df.groupBy("age").count().show();//6
df.registerTempTable("people");
DataFrame results = sqlContext.sql("SELECT name FROM people");
List<String> names = results.javaRDD().map(new Function<Row, String>() {
public String call(Row row) {return "Name: " + row.getString(0); }
}).collect();
for(String tuple : names){ //7
System.out.println(tuple);
}
ctx.stop();
1.
2.
3. 4.
5.
6.
7.
import java.util.List;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
14
Spark SQL application (in Java)
 (DataFrame example 2) Text File : Specifying the Schema
SparkConf sparkConf = new SparkConf().setAppName("dataFrame");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx);
JavaRDD<String> people = ctx.textFile("examples/src/main/resources/people.txt");
String schemaString = "name age";
List<StructField> fields = new ArrayList<StructField>();
for (String fieldName: schemaString.split(" ")) {
fields.add(DataTypes.createStructField(fieldName, DataTypes.StringType, true));
}
StructType schema = DataTypes.createStructType(fields);
JavaRDD<Row> rowRDD = people.map(new Function<String, Row>() {
public Row call(String record) throws Exception {
String[] fields = record.split(",");
return RowFactory.create(fields[0], fields[1].trim());
}
});
DataFrame peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema);
peopleDataFrame.show();//1
peopleDataFrame.printSchema();//2
ctx.stop();
1.
2.
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.DataFrame;
import java.util.List;
15
Spark SQL application (in Java)
 (DataFrame example 3) Text File : Inferring the Schema(JavaBean)
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
16
Spark SQL application (in Java)
 (DataFrame example 3) Text File : Inferring the Schema(JavaBean)
SparkConf sparkConf = new SparkConf().setAppName("dataFrame");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx);
JavaRDD<Person> people = ctx.textFile("examples/src/main/resources/people.txt").map(
new Function<String, Person>() {
public Person call(String line) throws Exception {
String[] parts = line.split(",");
Person person = new Person();
person.setName(parts[0]);
person.setAge(Integer.parseInt(parts[1].trim()));
return person;
}});
DataFrame schemaPeople = sqlContext.createDataFrame(people, Person.class);
schemaPeople.registerTempTable("people");
DataFrame teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19");
teenagers.show();//1
teenagers.printSchema();//2
ctx.stop();
1.
2.
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructType;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import java.util.ArrayList;
import java.util.List;
17
Spark SQL application (in Java)
 (Dataset example)
SparkConf sparkConf = new SparkConf().setAppName("dataset");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx);
...
DataFrame schemaPeople = sqlContext.createDataFrame(people, Person.class);
Dataset<Person> schools = schemaPeople.as(Encoders.bean(Person.class));
Dataset<String> strings = schools.map(new BuildString(), Encoders.STRING());
//Dataset<String> strings = schools.map(p-> p.getName()+" is "+ p.getAge()+" years old.", Encoders.STRING());
List<String> result = strings.collectAsList();
for(String tuple : result){//1
System.out.println(tuple);
}
ctx.stop();
class BuildString implements MapFunction<Person, String>
{
public String call(Person p) throws Exception {
return p.getName() + " is " + p.getAge() + "
years old.";
}
}
1.
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.MapFunction;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import java.util.List;
18
Spark SQL application (in Java)
 (Dataset example) Encoder
 http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoder.html
 http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoders.html
1. Primitive type 인코딩
List<String> data = Arrays.asList("abc", "abc", "xyz");
Dataset<String> ds = context.createDataset(data, Encoders.STRING());
2. tuple type(K,V pair) 인코딩
Encoder<Tuple2<Integer, String>> encoder2 = Encoders.tuple(Encoders.INT(), Encoders.STRING());
List<Tuple2<Integer, String>> data2 = Arrays.asList(new scala.Tuple2(1, "a");
Dataset<Tuple2<Integer, String>> ds2 = context.createDataset(data2, encoder2);
3. Java Beans을 활용한 reference type 인코딩
Encoders.bean(MyClass.class);
19
참고 자료
 Dataset
 https://issues.apache.org/jira/browse/SPARK-9999
 http://spark.apache.org/docs/latest/sql-programming-guide.html
 http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html
 http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoder.html
 https://databricks.com/blog/2015/11/20/announcing-spark-1-6-preview-in-databricks.html
 https://docs.cloud.databricks.com/docs/spark/1.6/index.html#examples/Dataset%20Aggregator.html
 http://technicaltidbit.blogspot.kr/2015/10/spark-16-datasets-best-of-rdds-and.html
 http://www.slideshare.net/databricks/apache-spark-16-presented-by-databricks-cofounder-patrick-wendell
 Tungsten
 https://issues.apache.org/jira/browse/SPARK-7075
 https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html
 catalyst
 https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst-optimizer.html
 Michael Armbrust et al. Spark SQL: Relational Data Processing in Spark, In SIGMOD , 2015

More Related Content

What's hot

Distributed Locking in Kubernetes
Distributed Locking in KubernetesDistributed Locking in Kubernetes
Distributed Locking in KubernetesRafał Leszko
 
一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築VirtualTech Japan Inc.
 
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~Shinnosuke Akita
 
Pacemakerを使いこなそう
Pacemakerを使いこなそうPacemakerを使いこなそう
Pacemakerを使いこなそうTakatoshi Matsuo
 
Overview about OracleVM and Oracle Linux
Overview about OracleVM and Oracle LinuxOverview about OracleVM and Oracle Linux
Overview about OracleVM and Oracle Linuxandreas kuncoro
 
Delphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisDelphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisKyle Hailey
 
Introducing the TPCx-HS Benchmark for Big Data
Introducing the TPCx-HS Benchmark for Big DataIntroducing the TPCx-HS Benchmark for Big Data
Introducing the TPCx-HS Benchmark for Big Datainside-BigData.com
 
DB2 LUW Access Plan Stability
DB2 LUW Access Plan StabilityDB2 LUW Access Plan Stability
DB2 LUW Access Plan Stabilitydmcmichael
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0Ji-Woong Choi
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...VirtualTech Japan Inc.
 
Apache Spark Performance tuning and Best Practise
Apache Spark Performance tuning and Best PractiseApache Spark Performance tuning and Best Practise
Apache Spark Performance tuning and Best PractiseKnoldus Inc.
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とかkotto_hihihi
 
Introduction to Apache Spark
Introduction to Apache SparkIntroduction to Apache Spark
Introduction to Apache Sparkdatamantra
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsAnton Kirillov
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Etsuji Nakai
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法Takuya ASADA
 
Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Zhenxiao Luo
 

What's hot (20)

Distributed Locking in Kubernetes
Distributed Locking in KubernetesDistributed Locking in Kubernetes
Distributed Locking in Kubernetes
 
一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築
 
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
 
Pacemakerを使いこなそう
Pacemakerを使いこなそうPacemakerを使いこなそう
Pacemakerを使いこなそう
 
Overview about OracleVM and Oracle Linux
Overview about OracleVM and Oracle LinuxOverview about OracleVM and Oracle Linux
Overview about OracleVM and Oracle Linux
 
Delphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisDelphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan Lewis
 
Introducing the TPCx-HS Benchmark for Big Data
Introducing the TPCx-HS Benchmark for Big DataIntroducing the TPCx-HS Benchmark for Big Data
Introducing the TPCx-HS Benchmark for Big Data
 
DB2 LUW Access Plan Stability
DB2 LUW Access Plan StabilityDB2 LUW Access Plan Stability
DB2 LUW Access Plan Stability
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
 
Apache Spark Performance tuning and Best Practise
Apache Spark Performance tuning and Best PractiseApache Spark Performance tuning and Best Practise
Apache Spark Performance tuning and Best Practise
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とか
 
Introduction to Apache Spark
Introduction to Apache SparkIntroduction to Apache Spark
Introduction to Apache Spark
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & Internals
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019Real time analytics at uber @ strata data 2019
Real time analytics at uber @ strata data 2019
 
Apache spark
Apache sparkApache spark
Apache spark
 
Ceph on Windows
Ceph on WindowsCeph on Windows
Ceph on Windows
 

Viewers also liked

Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
2.apache spark 실습
2.apache spark 실습2.apache spark 실습
2.apache spark 실습동현 강
 
Why FLOSS is a Java developer's best friend: Dave Gruber
Why FLOSS is a Java developer's best friend: Dave GruberWhy FLOSS is a Java developer's best friend: Dave Gruber
Why FLOSS is a Java developer's best friend: Dave GruberJAX London
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부Jinho Yoo
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
Spark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupSpark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupDatabricks
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learninghoondong kim
 
Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기SangWoo Kim
 
[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_sparkNAVER D2
 
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo Lee
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo LeeData Science lifecycle with Apache Zeppelin and Spark by Moonsoo Lee
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo LeeSpark Summit
 
Big Data visualization with Apache Spark and Zeppelin
Big Data visualization with Apache Spark and ZeppelinBig Data visualization with Apache Spark and Zeppelin
Big Data visualization with Apache Spark and Zeppelinprajods
 
Jane Recommendation Engines
Jane Recommendation EnginesJane Recommendation Engines
Jane Recommendation EnginesAdam Rogers
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델kidoki
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스kidoki
 
토론주제 Iso21500vs pmbok-배병주
토론주제   Iso21500vs pmbok-배병주토론주제   Iso21500vs pmbok-배병주
토론주제 Iso21500vs pmbok-배병주Byeong Ju Bae
 
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입[NDC 2011] 게임 개발자를 위한 데이터분석의 도입
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입Hoon Park
 
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) Tae Young Lee
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지위키북스
 
Machine learning & security. Detect atypical behaviour in logs
Machine learning & security. Detect atypical behaviour in logsMachine learning & security. Detect atypical behaviour in logs
Machine learning & security. Detect atypical behaviour in logsAlexander Melnychuk
 

Viewers also liked (20)

Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
2.apache spark 실습
2.apache spark 실습2.apache spark 실습
2.apache spark 실습
 
Why FLOSS is a Java developer's best friend: Dave Gruber
Why FLOSS is a Java developer's best friend: Dave GruberWhy FLOSS is a Java developer's best friend: Dave Gruber
Why FLOSS is a Java developer's best friend: Dave Gruber
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
SPARK SQL
SPARK SQLSPARK SQL
SPARK SQL
 
Spark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark MeetupSpark SQL Deep Dive @ Melbourne Spark Meetup
Spark SQL Deep Dive @ Melbourne Spark Meetup
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
 
Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기
 
[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark[264] large scale deep-learning_on_spark
[264] large scale deep-learning_on_spark
 
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo Lee
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo LeeData Science lifecycle with Apache Zeppelin and Spark by Moonsoo Lee
Data Science lifecycle with Apache Zeppelin and Spark by Moonsoo Lee
 
Big Data visualization with Apache Spark and Zeppelin
Big Data visualization with Apache Spark and ZeppelinBig Data visualization with Apache Spark and Zeppelin
Big Data visualization with Apache Spark and Zeppelin
 
Jane Recommendation Engines
Jane Recommendation EnginesJane Recommendation Engines
Jane Recommendation Engines
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
 
토론주제 Iso21500vs pmbok-배병주
토론주제   Iso21500vs pmbok-배병주토론주제   Iso21500vs pmbok-배병주
토론주제 Iso21500vs pmbok-배병주
 
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입[NDC 2011] 게임 개발자를 위한 데이터분석의 도입
[NDC 2011] 게임 개발자를 위한 데이터분석의 도입
 
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering) 20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
20141214 빅데이터실전기술 - 유사도 및 군집화 방법 (Similarity&Clustering)
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
 
Machine learning & security. Detect atypical behaviour in logs
Machine learning & security. Detect atypical behaviour in logsMachine learning & security. Detect atypical behaviour in logs
Machine learning & security. Detect atypical behaviour in logs
 

Similar to Spark sql

Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampSang-bae Lim
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache TajoGruter
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Gruter
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
Flamingo (FEA) Spark Designer
Flamingo (FEA) Spark DesignerFlamingo (FEA) Spark Designer
Flamingo (FEA) Spark DesignerBYOUNG GON KIM
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 
spark database Service
spark database Servicespark database Service
spark database Service창언 정
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJung Han
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuninghaiteam
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 

Similar to Spark sql (20)

Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcamp
 
Apache Spark
Apache SparkApache Spark
Apache Spark
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
Flamingo (FEA) Spark Designer
Flamingo (FEA) Spark DesignerFlamingo (FEA) Spark Designer
Flamingo (FEA) Spark Designer
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 
Learning spark ch1-2
Learning spark ch1-2Learning spark ch1-2
Learning spark ch1-2
 
spark database Service
spark database Servicespark database Service
spark database Service
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 

Spark sql

  • 2. 2 목차  Spark SQL 개요  Tungsten execution engine  Catalyst optimizer  RDD, DataFrame  Dataset  Spark SQL application (in Java)  Linking  example  참고 자료
  • 3. 3 Spark SQL  정형/반정형 데이터(structured/semi-structured Data) 처리에 특화된 Spark Library  Tungsten execution engine & Catalyst optimizer 기반  다양한 interface 지원  SQL, HiveSQL queries  Dataframe API  Scala, Java, Python, and R에서 사용 가능  Spark 1.3  Dataset API  Scala, Java 에서 사용 가능  Spark 1.6  다양한 Input source를 지원  RDD & 임시 테이블  JSON 데이터 셋  Parquet file  Hive Table  ODBC/JCBC 서버와의 연동
  • 4. 4 Tungsten execution engine  스파크의 bottleneck은?  I/O나 network bandwidth가 아님  High bandwidth SSD & striped HDD의 등장  10Gbps network의 등장  CPU 와 memory에서 bottleneck 현상이 발생  기본적인 processing workload와 함께  Disk I/O를 최소화하기 위한 input data pruning workload  Shuffle을 위한 serialization과 hashing이 특히 key bottleneck  CPU와 memory의 효율을 높여야…  하드웨어의 한계에 가깝게 성능을 뽑아올 수 있는 System Engine이 필요!  Project Tungsten  Spark 1.4부터 DataFrame에 적용  spark 1.6에서 Dataset으로 확장 참고: 1. Project Tungsten – databrick 2. https://issues.apache.org/jira/browse/SPARK-7075
  • 5. 5 Tungsten execution engine – three Goal  Memory Management and Binary Processing  JVM object 모델과 garbage collection의 overhead가 큼 =>장기적으로 data를 저장할 경우 Java objects 보다는 binary format으로 저장  메모리를 좀더 명확하게 관리할 필요가 있음 => denser in-memory data format을 적용하여 메모리 사용률을 최소화 함 더 나은 memory accounting (size of bytes) 기술 적용(기존엔 Heuristics 기반)  이를 기반으로 하면서 domain semantics을 최대한 반영한 data processing을 지원해야 함 =>binary format의 in memory data에 대해서도 data type을 이해하는 operator를 지원 (serialization/deserialization 없이 data processing)  Cache-aware Computation  sorting and hashing for aggregations, joins, and shuffle의 성능이 향상이 필요 =>memory hierarchy를 활용하는 algorithm과 data struncture  Code Generation  expression evaluation, DataFrame/SQL operators, serializer의 성능 향상이 필요 =>modern compilers and CPUs의 성능을 제대로 활용할 수 있는 code generation
  • 6. 6 Catalyst optimizer  스칼라 함수형 프로그래밍 기법 특징을 살려 구현한 extensible optimizer  extensible design  새로운 optimization techniques과 feature들의 추가가 용이  외부 개발자가 optimizer를 확장하여 사용하기 용이  Catalyst의 구동 (In Spark SQL) ( 자세한 사항은 paper 참고)  Tree 구조를 기반으로 optimization  크게 4단계로 진행 그림 출처: Catalyst Optimizer - databrick x+(1+2) 의 tree 예제 Catalyst의 phase
  • 7. 7 RDD, DataFrame DataFrames / SQL Structured Binary Data (Tungsten) • High level relational operation 사용 가능 • Catalyst optimization 적용 가능 • Lower memory pressure • Memory accounting (avoid OOMs) • Faster sorting / hashing / serialization RDDs Collections of Native JVM Objects • 로직 상에 특정 data type 표현이 용이 • Compile-time type-safety 보장 • 함수형 프로그래밍 가능  두 타입 간의 변환은 지원 되지만..  높은 변환 cost  변환을 위한 boilerplate(표준 문안, 규칙) 숙지 필요  둘의 장점을 합쳐놓은 API를 제공할 수 있을까?  Catalyst optimizer & Tungsten execution engine의 장점을 활용할 수 있어야 함  Domain object의 type을 이해할 수 있고 이를 활용할 수 있어야 함 성능 ↑안전성 & 유연성 ↑
  • 8. 8 Dataset  RDD와 DataFrame의 장점만 취해 만든 interface API  http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html  특장점  Fast  Typesafe  Support for a variety of object models  Java Compatible  Interoperates with DataFrames Dataset Structured Binary Data (Tungsten) • High level relational operation 사용 가능 • Catalyst optimization 적용 가능 • Lower memory pressure • Memory accounting (avoid OOMs) • Faster sorting / hashing / serialization • 로직 상에 특정 data type 표현이 용이 • Compile-time type-safety 보장 • 함수형 프로그래밍 가능 그림 출처: technicaltidbit.blogspot.kr/
  • 9. 9 Dataset  Encoder  Dataset은 테이블 형식의 Structured Binary data로 저장  JVM object인 RDD는 물론, DataFrame과도 형태가 다름  Processing 및 전송을 위해서는 serialization이 필요  RDD/DataFrame type의 data를 Dataset으로 변경하기 위해서는 Object의 타입에 맞는 특별한 Encoder가 필요(반대 방향으로의 변환에도 동일)  이전 버전까지 사용했던 java, kyro Serialization에 비해 성능 우수함 Data Serialization 성능 비교 그림 출처: Introducing Spark Datasets- databrick
  • 10. 10 Dataset  structured/semi-structured Data 분석 => Dataset으로 구분 RDD DataFrame Dataset 성능 비교적 느림 빠름 빠름 메모리 관리 누수 존재 최적화 최적화 Type-safety 보장 보장되지 않음 보장 분석 확장성 유연함 제한적 유연함 RDD-Dataset의 WordCount 예제의 실행 시간 비교 RDD-Dataset의 캐싱 시 memory 사용량 비교 그림 출처: Introducing Spark Datasets- databrick
  • 11. 11 Spark SQL application (in Java)  Linking  Pom.xml에 박스 내용 추가
  • 12. 12 Spark SQL application (in Java)  sample examples/src/main/resources/people.json examples/src/main/resources/people.txt
  • 13. 13 Spark SQL application (in Java)  (DataFrame example 1) Jason File SparkConf sparkConf = new SparkConf().setAppName("dataFrame"); JavaSparkContext ctx = new JavaSparkContext(sparkConf); SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx); DataFrame df = sqlContext.read().json("examples/src/main/resources/people.json"); df.show();//1 df.printSchema();//2 df.select("name").show(); //3 df.select(df.col("name"), df.col("age").plus(1)).show(); //4 df.filter(df.col("age").gt(21)).show(); //5 df.groupBy("age").count().show();//6 df.registerTempTable("people"); DataFrame results = sqlContext.sql("SELECT name FROM people"); List<String> names = results.javaRDD().map(new Function<Row, String>() { public String call(Row row) {return "Name: " + row.getString(0); } }).collect(); for(String tuple : names){ //7 System.out.println(tuple); } ctx.stop(); 1. 2. 3. 4. 5. 6. 7. import java.util.List; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.Function; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.Row;
  • 14. 14 Spark SQL application (in Java)  (DataFrame example 2) Text File : Specifying the Schema SparkConf sparkConf = new SparkConf().setAppName("dataFrame"); JavaSparkContext ctx = new JavaSparkContext(sparkConf); SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx); JavaRDD<String> people = ctx.textFile("examples/src/main/resources/people.txt"); String schemaString = "name age"; List<StructField> fields = new ArrayList<StructField>(); for (String fieldName: schemaString.split(" ")) { fields.add(DataTypes.createStructField(fieldName, DataTypes.StringType, true)); } StructType schema = DataTypes.createStructType(fields); JavaRDD<Row> rowRDD = people.map(new Function<String, Row>() { public Row call(String record) throws Exception { String[] fields = record.split(","); return RowFactory.create(fields[0], fields[1].trim()); } }); DataFrame peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema); peopleDataFrame.show();//1 peopleDataFrame.printSchema();//2 ctx.stop(); 1. 2. import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.Function; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.DataFrame; import java.util.List;
  • 15. 15 Spark SQL application (in Java)  (DataFrame example 3) Text File : Inferring the Schema(JavaBean) import java.io.Serializable; public class Person implements Serializable { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
  • 16. 16 Spark SQL application (in Java)  (DataFrame example 3) Text File : Inferring the Schema(JavaBean) SparkConf sparkConf = new SparkConf().setAppName("dataFrame"); JavaSparkContext ctx = new JavaSparkContext(sparkConf); SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx); JavaRDD<Person> people = ctx.textFile("examples/src/main/resources/people.txt").map( new Function<String, Person>() { public Person call(String line) throws Exception { String[] parts = line.split(","); Person person = new Person(); person.setName(parts[0]); person.setAge(Integer.parseInt(parts[1].trim())); return person; }}); DataFrame schemaPeople = sqlContext.createDataFrame(people, Person.class); schemaPeople.registerTempTable("people"); DataFrame teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19"); teenagers.show();//1 teenagers.printSchema();//2 ctx.stop(); 1. 2. import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.Function; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.types.DataTypes; import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.types.StructField; import org.apache.spark.sql.Row; import org.apache.spark.sql.RowFactory; import java.util.ArrayList; import java.util.List;
  • 17. 17 Spark SQL application (in Java)  (Dataset example) SparkConf sparkConf = new SparkConf().setAppName("dataset"); JavaSparkContext ctx = new JavaSparkContext(sparkConf); SQLContext sqlContext = new org.apache.spark.sql.SQLContext(ctx); ... DataFrame schemaPeople = sqlContext.createDataFrame(people, Person.class); Dataset<Person> schools = schemaPeople.as(Encoders.bean(Person.class)); Dataset<String> strings = schools.map(new BuildString(), Encoders.STRING()); //Dataset<String> strings = schools.map(p-> p.getName()+" is "+ p.getAge()+" years old.", Encoders.STRING()); List<String> result = strings.collectAsList(); for(String tuple : result){//1 System.out.println(tuple); } ctx.stop(); class BuildString implements MapFunction<Person, String> { public String call(Person p) throws Exception { return p.getName() + " is " + p.getAge() + " years old."; } } 1. import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.Function; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Encoders; import java.util.List;
  • 18. 18 Spark SQL application (in Java)  (Dataset example) Encoder  http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoder.html  http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoders.html 1. Primitive type 인코딩 List<String> data = Arrays.asList("abc", "abc", "xyz"); Dataset<String> ds = context.createDataset(data, Encoders.STRING()); 2. tuple type(K,V pair) 인코딩 Encoder<Tuple2<Integer, String>> encoder2 = Encoders.tuple(Encoders.INT(), Encoders.STRING()); List<Tuple2<Integer, String>> data2 = Arrays.asList(new scala.Tuple2(1, "a"); Dataset<Tuple2<Integer, String>> ds2 = context.createDataset(data2, encoder2); 3. Java Beans을 활용한 reference type 인코딩 Encoders.bean(MyClass.class);
  • 19. 19 참고 자료  Dataset  https://issues.apache.org/jira/browse/SPARK-9999  http://spark.apache.org/docs/latest/sql-programming-guide.html  http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html  http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Encoder.html  https://databricks.com/blog/2015/11/20/announcing-spark-1-6-preview-in-databricks.html  https://docs.cloud.databricks.com/docs/spark/1.6/index.html#examples/Dataset%20Aggregator.html  http://technicaltidbit.blogspot.kr/2015/10/spark-16-datasets-best-of-rdds-and.html  http://www.slideshare.net/databricks/apache-spark-16-presented-by-databricks-cofounder-patrick-wendell  Tungsten  https://issues.apache.org/jira/browse/SPARK-7075  https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html  catalyst  https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst-optimizer.html  Michael Armbrust et al. Spark SQL: Relational Data Processing in Spark, In SIGMOD , 2015