Spark Application ๊ฐ๋ฐ์ scala ์ฌ์ฉ์ ์์น์ผ๋ก ํ๋ค.
์ค์นผ๋ผ ์ฝ๋ฉ ์คํ์ผ์ Scala ์ฝ๋ฉ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์๋ช
์
camelCase
๋ฅผ ์ฌ์ฉํ๋ค.- ๋ค์์ ์ผ์ด์ค๋ ์์ธ์ ์ผ๋ก
snake_case
๋ฅผ ์ฌ์ฉํ๋ค.DataFrame/Dataset
์case class
์ ๋ด์ ํ ์ด๋ธ๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ- ํ๋๋ช
์ด ํ
์ด๋ธ ์ปฌ๋ผ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
case class
์ ํ๋๋ช ์snake_case
๋ฅผ ์ฌ์ฉํ๋ค.
- ํ๋๋ช
์ด ํ
์ด๋ธ ์ปฌ๋ผ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
- ๋น์ทํ ๋งฅ๋ฝ์ผ๋ก,
Column.name
๋ SQL์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋กsnake_case
๋ก ์์ฑํ๋ค.
- ๋ค์์ ์ผ์ด์ค๋ ์์ธ์ ์ผ๋ก
DataFrame/Dataset/RDD
๋ฅผ ๋ด๋ ๋ณ์๋ช ์๋DF/DS/RDD
postfix๋ฅผ ๋ถ์ธ๋ค.val userDF: DataFrame = ... val bookDS: Dataset[Book] = ... val bestsellerRDD: RDD[Bestseller] = ...
- ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ๋ณ์๋ช
์๋ ๋จ์ํ์, ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ํํํ๋ ๋ณ์๋ช
์๋ ๋ณต์ํ์ ์ฌ์ฉํ๋ ์๋ฏธ์ ์ค๋ณต์ ์ต์ํํ๋ค.
val defaultCategory = "comic" val categories = List("general", "romance", "fantasy", "comic", "bl") // Don't do this val categoryList = List("general", "romance", "fantasy", "comic", "bl")
- Spark Application์ ์ด๋ฆ์ ๋์ฌ๊ตฌ(verb phrase)๋ฅผ ์ฌ์ฉํ๋ค.
ex) BuildBestseller, BuildRecommend
- chained method ํธ์ถ์ ๋ค์์ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ฉํ๋ค.
- on a single line
- line length๊ฐ 100 ์ด๋ด์ด๊ณ ๊ฐ๋ ์ฑ์ ํค์น์ง ์๋ ๊ฒฝ์ฐ ํ์ฉ
- on multiple lines
- ์ผ๋ฐ์ ์ธ ๋ชจ๋ ๊ฒฝ์ฐ
- argument๋ฅผ ๋ฐ๋ method๊ฐ ํ line์ ๋ ์ด์ ์ฌ ์ ์์
- on a single line
outputDF.write.format("parquet").mode(SaveMode.Overwrite).saveAsTable(output)
outputDF.write
.format("parquet")
.mode(SaveMode.Overwrite)
.saveAsTable(output)
outputDF.write.format("parquet")
.mode(SaveMode.Overwrite)
.saveAsTable(output)
// don't do these
outputDF.write.format("parquet").mode(SaveMode.Overwrite)
.saveAsTable(output)
outputDF.write
.format("parquet").mode(SaveMode.Overwrite)
.saveAsTable(output)
- ์ฟผ๋ฆฌ๋ฌธ์ด ๊ฐ๊ฒฐํ๊ณ ์งง์ ๊ฒฝ์ฐ singleline string ์ฌ์ฉ
val teenagerNameDS = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19").as[Name]
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ indent์ ํจ๊ป multiline string ์ฌ์ฉ, ์ฟผ๋ฆฌ๋ฌธ ๋ด indent๋
1 space
์ฌ์ฉ
val teenagerNameDS = spark
.sql(
s"""
|SELECT
| name // indent 1 space
|FROM people
|WHERE age BETWEEN 13 AND 19
|""".stringMargin
).as[Name]
- ๊ฐ๊ธ์ ์ด๋ฉด Spark SQL, Dataset & DataFrame API๋ฅผ ์ฌ์ฉํ๋ค.
- Type Safety, High Level Abstraction
- Spark SQL์ Catalyst Optimizer๋ก ์ธํ ์ฑ๋ฅ ์ต์ ํ
- Low Level์ ์ธ๋ฐํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ RDD API ์ฌ์ฉ์ ํ์ฉํ๋ค.