Programming/python

PySpark SQL 시작하기

방황하는 데이터불도저 2024. 1. 4. 19:50

https://spark.apache.org/docs/latest/sql-getting-started.html#getting-started

 

Getting Started - Spark 3.5.0 Documentation

 

spark.apache.org

공식문서를 참고하여 작성하였습니다.


1. Starting Point : SparkSession 

 

먼저 java를 먼저 설치하고, java/bin 경로를 환경변수로 설정해야한다.

 - java 설치 

 - 리눅스에서 java 환경변수로 설정하는 방법

 

셋팅을 완료하였다면 아래의 코드로 Session을 생성해준다.

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

 

2. Creating DataFrames

 

SparkSession을 통해 기존의 RDD, Hive table, Spark data sources 에서 DataFrames를 만들어준다.

라고 설명이 되어있지만 복잡하게 생각할거없이, 아래의 코드로 내가 가진 json파일을 읽을 수 있다.

# JSON 파일 경로
root_path = "./aihub/13.한국어글자체/"
textwild_json = root_path+"04._Text_in_the_wild_230209_add/textinthewild_data_info.json"

df = spark.read.json(textwild_json, multiLine=True)
df.printSchema()

 

#결과

root
 |-- annotations: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- attributes: struct (nullable = true)
 |    |    |    |-- class: string (nullable = true)
 |    |    |-- bbox: array (nullable = true)
 |    |    |    |-- element: long (containsNull = true)
 |    |    |-- id: string (nullable = true)
 |    |    |-- image_id: string (nullable = true)
 |    |    |-- text: string (nullable = true)
 |-- images: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- file_name: string (nullable = true)
 |    |    |-- height: long (nullable = true)
 |    |    |-- id: string (nullable = true)
 |    |    |-- type: string (nullable = true)
 |    |    |-- width: long (nullable = true)
 |-- info: struct (nullable = true)
 |    |-- date_created: string (nullable = true)
 |    |-- name: string (nullable = true)
 |-- licenses: array (nullable = true)
 |    |-- element: string (containsNull = true)

 

내가 가진 json파일은 복잡한 구조를 띄고있어서 아래에 tutorial에 나와있는 show()기능은 별로 효율적이지 못하지만 위처럼 스키마를 보기엔 편리한 기능을 가지고 있다.

# spark is an existing SparkSession
df = spark.read.json("examples/src/main/resources/people.json")
# Displays the content of the DataFrame to stdout
df.show()
# +----+-------+
# | age|   name|
# +----+-------+
# |null|Michael|
# |  30|   Andy|
# |  19| Justin|
# +----+-------+