다양한 구조화된 형식(예: JSON, Hive 테이블, Parquet, Avro, ORC, CSV)으로 데이터를 읽고 쓸 수 있습니다.
Tableau, Power BI, Talend와 같은 외부 비즈니스 인텔리전스(BI)부터 MySQL 및 PostgreSQL과 같은 RDBMS등 에서 JDBC/ODBC 커넥터를 사용하여 데이터를 쿼리할 수 있습니다.
Spark 애플리케이션의 데이터베이스에 테이블 또는 view로 저장된 정형 데이터와 상호 작용할 수 있는 프로그래밍 방식 인터페이스를 제공합니다.
정형 데이터에 대해 SQL 쿼리를 실행하기 위한 대화형 셸을 제공합니다.

SparkSession은 정형화 API로 스파크를 프로그래밍하기 위한 진입점을 제공한다. SparkSession을 이용하면 쉽게 클래스를 가져오고 코드에서 인스턴스 생성 가능하다.
// 스칼라 예제
import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder
.appName("SparkSQLExampleApp")
.getOrCreate()
// dataset 경로
val csvFile="/databricks-datasets/learning-spark-v2/flights/departuredelays.csv"
// csv load
val df = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.load(csvFile)
// 임시뷰 생성
df.createOrReplaceTempView("us_delay_flights_tbl")
//shema생성
val schema = "date STRING, delay INT, distance INT,
origin STRING, destination STRING"
// spark 쿼리
spark.sql("""SELECT distance, origin, destination
FROM us_delay_flights_tbl WHERE distance > 1000
ORDER BY distance DESC""").show(10)
//DataFrame이용
(df.select("distance", "origin", "destination")
.where(col("distance") > 1000)
.orderBy(desc("distance"))).show(10)
중앙 메타스토어에 저장됩니다.
Spark 테이블에 대해 별도의 메타스토어를 사용하는 대신 Spark는 기본적으로 /user/hive/warehouse에 있는 Apache Hive 메타스토어를 사용하여 테이블에 대한 모든 메타데이터를 유지합니다. spark.sql.warehouse.dir그러나 Spark 구성 변수 를 로컬 또는 외부 분산 저장소로 설정할 수 있는 다른 위치 로 설정하여 기본 위치를 변경할 수 있습니다.
# In Python
csv_file = "/databricks-datasets/learning-spark-v2/flights/departuredelays.csv"
schema="date STRING, delay INT, distance INT, origin STRING, destination STRING"
flights_df = spark.read.csv(csv_file, schema=schema)
flights_df.write.saveAsTable("managed_us_delay_flights_tbl")
( flights_df
.write
.option("경로", "/tmp/data/us_flights_delay")
.saveAsTable("us_delay_flights_tbl"))
df_sfo = spark.sql("SELECT date, delay, origin, destination FROM
us_delay_flights_tbl WHERE origin = 'SFO'")
//전체뷰
df_sfo.createOrReplaceGlobalTempView("us_origin_airport_SFO_global_tmp_view")
//임시뷰
df_jfk.createOrReplaceTempView("us_origin_airport_JFK_tmp_view")
임시뷰: SparkSession에서만 접근가능
전체뷰: 전체 Sesisond에서 접근가능
spark.catalog.listDatabases()
spark.catalog.listTables()
spark.catalog.listColumns("us_delay_flights_tbl")
데이터 소스에서 데이터프레임으로 데이터를 읽기 위한 핵심 구조이다.
DataFrameReader.format(args).option("key", "value").schema(args).load()
val file = """/databricks-datasets/learning-spark-v2/flights/summary-data/parquet/2010-summary.parquet"""
val df = spark.read.format("parquet").load(file)
// Use Parquet
val df2 = spark.read.load(file)
// Use CSV
val df3 = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/learning-spark-v2/flights/summary-data/csv/*")
// Use JSON
val df4 = spark.read.format("json")
.load("/databricks-datasets/learning-spark-v2/flights/summary-data/json/*")
지정된 내장 데이터 소스에 데이터를 저장하거나 쓰는 작업을 수행한다. SparkSession이 아닌 저장하려는 데이터 프레임에서 인스턴스에 엑세스가능하다.
DataFrameWriter.format(args)
.option(args)
.bucketBy(args)
.partitionBy(args)
.save(path)
DataFrameWriter.format(args).option(args).sortBy(args).saveAsTable(table)
SparkSql을 사용했을때 다음과 같은 이점을 얻을 수 있다.