KEEP GOING

[Spark] 스파크 데이터프레임(DataFrame) 개념 파악하기 본문

bigdata/spark

[Spark] 스파크 데이터프레임(DataFrame) 개념 파악하기

jmHan 2022. 10. 26. 15:20
반응형

spark dataframe

목차

     

    DataFrame이란

    Spark는 자료구조로 RDD와 Datafame도 지원합니다. Spark Dataframe은 R의 DataFrame, Python pandas의 DataFrame과 비슷한 구조를 가지고 있습니다.

    Spark의 DataFrame은 정형 데이터를 효과적으로 다룰 수 있는 방법을 제공합니다.

     

    DataFrame의 장점 

    DataFrame을 사용할 경우 칼럼명으로 데이터를 참조할 수 있고 SQL 쿼리를 이용하여 데이터에 접근할 수 있습니다. Spark는 Spark의 DataFrame을 pandas의 DataFrame 형태로 바꿔주는 기능도 지원합니다.

     

    RDD와 DataFrame의 차이 

    RDD는 mapreduce 작업을 수행하고 transformation과 action이라는 두가지 방식으로 동작합니다.

    lazy evaluation으로 처리되기 때문에 action이 수행되어야 비로소 실제로 동작합니다.

     

    DataFrame은 sparkSQL을 사용할 수 있습니다. RDBMS의 테이블처럼 스키마를 가지고 있으며 테이블 연산을 수행하기 적합합니다.

     

    SparkSession으로 Spark DataFrame 생성하기 

    RDD를 생성하기 위해 SparkContext 객체가 필요했지만 Spark DataFrame을 생성하려면 먼저 SparkSession 객체를 생성해야 합니다.

    SparkSession이 제공하는 builder() 메서드를 이용하여 새로운 인스턴스를 생성하고 기존 인스턴스를 재사용할 수도 있습니다.

    Spark 2.0 이전 버전에는 SQL 사용을 위해서 SQLContext와 HiveContext API가 필요했으나 Spark 2.0 버전 이후부터는 SparkSession으로 대체되어 사용하지 않습니다.

    from pyspark.sql.session import SparkSession
    
    spark = SparkSession.builder\
                        .appName('')\
                        .config()\
                        .getOrCreate()
    df = spark.read.json("/dir/people.json")
    df.show() # 데이터프레임 조회 
    df.select('name').show() #name 컬럼명만 조회
    df.filter(df['age'] > 21).show() #21세 이상인 사람들만 조회
    df.groupBy('age').count().show() # 나이별 인원 수 조회

     

    SparkSQL 

    SparkSQL은 정형 데이터를 처리하기 위한 Spark의 패키지입니다.

    SparkSQL은 SQL, HiveQL 뿐만 아니라 Parquet, JSON 등 다양한 데이터 형식을 받아올 수 있습니다.

    from pyspark.sql.session import SparkSession

     

    SparkSession으로 Hive 연결하기 

    SparkSession는 Hive 연결을 지원하기 때문에 SparkSession을 사용하여 HiveQL 쿼리를 작성할 수 있습니다. Hive 기능을 사용하려면 SparkSession을 구성할 때 SparkSession.Builder 객체의 enableHiveSupport 메서드를 호출해야 합니다.

    from pyspark.sql.session import SparkSession
    
    spark = SparkSession.builder.enableHiveSupport().getOrCreate()
    table1 = \
    spark.sql('''
        SELECT *
        FROM db1.table1
    ''')

     

    반응형
    Comments