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() 를 추가해주면 된다.

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으로 대체 됐다고 보면 된다.

DataFrame

  1. DataSet이 나오기 전에 사용하던 DataSet
  2. 맞는 표현은 아니지만, 간단한 비유로는 Row 와 Column구조를 가진 RDD
    1. RDD와 같이 분산 데이터 처리를 위한것.
    2. RDD : value에 초점을 맞춤
    3. DataFrame : value + schema를 다룸
  3. Row타입을 사용한다

DataFrameReader / DataFrameWriter

  1. DataFrameReader
    1. SparkSession.read를 이용하여 메소드 접근
      1. 데이터 소스를 지정하여 데이터를 읽어 데이터 프레임을 생성해준다
  2. DataFrameWriter
    1. Dataset.write를 이용하여 특정 데이터 소스로 적재한다.

Row, Column

  1. SQL의 Row,Column과 같은 표현 모델이라고 생각하면 된다.

functions

  1. 데이터 처리시 사용하는 API
    1. select, sum, filter 등 여러가지 메소드들이 존재한다
      1. 공식 docs 에서 확인할 수 있다

StructType / StructField

  1. 스키마 정보를 정의하는 API
  2. StructType (List(StructField,StructField,StructField)) 와 같은 형식으로 생성한다(Scala)

GroupedData, GroupedDataSetP

  1. 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

+ Recent posts