SparkSQL ์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ๋ถ„์„

SparkSQL์ด๋ž€?


๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Spark ๋ชจ๋“ˆ

  • ๋Œ€ํ™”ํ˜• Spark ์…ธ์ด ์ œ๊ณต๋จ
  • ํ•˜๋‘ก ์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ Hive ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์—†์ด ์ตœ๋Œ€ 100๋ฐฐ๊นŒ์ง€ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ
  • ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ SQL๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

RDD ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์™ธ๋ถ€ ๋ฐ์ดํ„ฐ(์Šคํ† ๋ฆฌ์ง€, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์€ ํ…Œ์ด๋ธ”์ด ๋˜๊ณ  (ํŠน์ • ํ•จ์ˆ˜ ์‚ฌ์šฉ) ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ SQL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

SparkSQL ์‚ฌ์šฉ๋ฒ•


SparkSQL ์‚ฌ์šฉ๋ฒ• - ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ(1)

  • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ
    SparkSession์˜ readํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ํ˜น์€ SQL๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ์ฝ์–ด์˜ด

  • Redshift ์—ฐ๊ฒฐ ์˜ˆ์ œ
    SparkSession์„ ๋งŒ๋“ค ๋•Œ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋Š” JDBC jar์„ ์ง€์ •
    SparkSession์˜ readํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    -๋กœ๊ทธ์ธ ๊ด€๋ จ ์ •๋ณด์™€ ์ฝ์–ด์˜ค๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ” ํ˜น์€ SQL์„ ์ง€์ •
    -๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ฆฌํ„ด๋จ
    ์•ž์„œ ๋ฆฌํ„ด๋œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์ง€์ •
    SparkSession์˜ sqlํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ

from pyspark.sql import SparkSession

spark = SparkSession\
	.builder\
	.appName("Python Spark SQL basic example")\
	.config("spark.jars", "/usr/local/lib/python3.6/dist-packages/pyspark/jars/RedshiftJDBC42-no-awssdk-1.2.20.1043.jar") \
	.getOrCreate()

SparkSQL ์‚ฌ์šฉ๋ฒ• - ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ(2)

  • Spark Sessiondml read ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ(๋กœ๊ทธ์ธ ๊ด€๋ จ ์ •๋ณด์™€ ์ฝ์–ด์˜ค๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ” ํ˜น์€ SQL์„ ์ง€์ •). ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ฆฌํ„ด๋จ
df_user_session_channel = spark.read \
    .format("jdbc") \
    .option("driver", "com.amazon.redshift.jdbc42.Driver") \
    .option("url", "jdbc:redshift://learnde.cduaw970ssvt.ap-northeast-2.redshift.amazonaws.com:5439/prod?user=guest&password=Guest1!*") \
    .option("dbtable", "raw_data.user_session_channel") \
    .load()

SparkSQL ์‚ฌ์šฉ๋ฒ• - SQL์‚ฌ์šฉ๋ฐฉ๋ฒ•

  • ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ” ๋ทฐ ์ƒ์„ฑ: ํ…Œ์ด๋ธ”์ด ๋งŒ๋“ค์–ด์ง
    createOrReplaceTempView: sparkSession์ด ์‚ด์•„์žˆ๋Š” ๋™์•ˆ ์กด์žฌ
    createGlobalTempView: Spark ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์‚ด์•„์žˆ๋Š” ๋™์•ˆ ์กด์žฌ
  • Spark Session์˜ sqlํ•จ์ˆ˜ SQL๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ฐ›์Œ
namegender_df.createOrReplaceTempView("namegender")
namegender_group_df = spark.sql("
    SELECT gender, count(1) FROM namegender GROUP BY 1
")
print(namegender_group_df.collect())

profile
๊ฒŒ์„๋ €๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€