SparkSql?
Spark에서 RDD는 값은 표현하지만, Schema에 대한 방법이 없는데 이것을 대체하는 방법이라고 보면된다.
간단히 말하면 Spark에서 Hive 혹은 Mysql과 같은 RDB의 SQL을 사용할 수 있게 만들어 주는 것이라고 보면 쉽다
- SQL작성시 ANSI-SQL 및 Hive-QL문법을 사용가능하다.
- Hive-QL문법을 대다수 지원하지만, 모두 지원하는 것은 아니다 예외 항목이 있으니 홈페이지를 확인해보는 것이 좋다
- 2.0버전부터 SQL:2003표준을 지원한다
방식
기본적으로 Spark에서 데이터를 다루는 방법은 SQL를 사용하는것 혹은 DataSet API을 사용하는 방법이 있다.
- Dataset
주요 프로그래밍 구성요소
SparkSession
- RDD 사용시 SparkContext를 사용한것 처럼 DataSet을 사용할 때 SparkSession을 사용한다
- UDF를 등록하기 위한 목적으로 사용
- 생성 기본 형태
val ss = SparkSession.builder().config(conf).getOrCreate()
- Spark 2.0부터 사용됨 기존에는SQLContext, HiveContext를 구분하여 사용했다
- 2.0버전부터는 Hive를 기본 지원하기 때문에 SparkSession을 사용하면 된다
- 지원을 한다는 것 이지 필수적으로 hive를 필수로 사용해야 하는 것은 아니다
- 만약 Hive를 사용하고 Hive를 사용하고 싶다면, hive-site.xml, core-site.xml, hdfs-site.xml을 spark의 conf 디렉토리에 추가하면 된다
- 저게 싫다면 spark-submit의 경우 --file 에 추가해도 된다.
.enableHiveSupport()
를 추가해주면 된다.
- 2.0버전부터는 Hive를 기본 지원하기 때문에 SparkSession을 사용하면 된다
DataSet
- 분산 오브젝트 컬렉션에 대한 프로그래밍 모델
- Transformation, Action 연산을 포함하고 있다.- Spark 1.6 버전부터 DataFrame이라는 API를 사용함
- Spark 2.0 버전부터 Dataset이 Spark SQL의 Main API로 지정
- 이때부터 DataFrame은 미지원
- Scala에서는 Type Alias를 허용 하여 하위 호환 유지가 됨.
- DataSet을 따라 들어가보면 아래와 같이 구성되어 있다.
def toDF(): DataFrame = new Dataset[Row](sparkSession, queryExecution, RowEncoder(schema))
- 즉 DataFrame이 있긴 하지만, Dataset으로 대체 됐다고 보면 된다.
- Scala에서는 Type Alias를 허용 하여 하위 호환 유지가 됨.
- 이때부터 DataFrame은 미지원
DataFrame
- DataSet이 나오기 전에 사용하던 DataSet
- 맞는 표현은 아니지만, 간단한 비유로는 Row 와 Column구조를 가진 RDD
- RDD와 같이 분산 데이터 처리를 위한것.
- RDD : value에 초점을 맞춤
- DataFrame : value + schema를 다룸
- Row타입을 사용한다
DataFrameReader / DataFrameWriter
- DataFrameReader
- SparkSession.read를 이용하여 메소드 접근
- 데이터 소스를 지정하여 데이터를 읽어 데이터 프레임을 생성해준다
- SparkSession.read를 이용하여 메소드 접근
- DataFrameWriter
- Dataset.write를 이용하여 특정 데이터 소스로 적재한다.
Row, Column
- SQL의 Row,Column과 같은 표현 모델이라고 생각하면 된다.
functions
- 데이터 처리시 사용하는 API
- select, sum, filter 등 여러가지 메소드들이 존재한다
- 공식 docs 에서 확인할 수 있다
- select, sum, filter 등 여러가지 메소드들이 존재한다
StructType / StructField
- 스키마 정보를 정의하는 API
StructType (List(StructField,StructField,StructField))
와 같은 형식으로 생성한다(Scala)
GroupedData, GroupedDataSetP
- groupBy 메소드 등에 이해 군집 연산을 수행할 때 사용
개인적으로 공부한 내용 포스팅 중
잘못된 정보는 지적해주시면 좋겠습니다!
'프로그래밍 및 IT > Spark' 카테고리의 다른 글
spark-Setting (0) | 2023.11.28 |
---|---|
spark-scheduling (0) | 2023.11.28 |
WordCount (0) | 2023.10.13 |
RDD Action (0) | 2023.10.13 |
RDD Transformation (0) | 2023.10.13 |