SQL數據整理 by pySpark(1)
在大數據的學習裡,除了使用python的Pandas處理資料,Spark更是數據處理的好用工具,不但可以做到與Pandas相同的數據處理(包括data extraction及 data…
SQL數據整理 by pySpark(1)
在大數據的學習裡,除了使用python的Pandas處理資料,Spark更是數據處理的好用工具,不但可以做到與Pandas相同的數據處理(包括data extraction及 data cleaning),還能直接使用SQL進行資料分析。再進階一點,自訂JSON格式進行資料交換也不是問題,相當便利好用。有別於Pandas的單機處理,還可以搭配RDD(Resilient Distributed DataSet)運算,加速資料處理及資料分析。
以下所使用的Spark SQL語法與Hive SQL均相通,記錄學習過程中幾種實務上好用的SQL數據使用技巧,供有需要的人參考。

前言
執行環境:Google Colab
執行前,記得先安裝pyspark package,語法如下,接下來就可以直接用下面的code進行實作。
!pip install pyspark
為閱讀上的便利,開頭的code參考如下,其餘的部分僅列出所需資料表以及主要處理的SQL語法。Pandas的呈現為有助於理解資料表(與一般所見的2維資料表相同),實際處理若無特別需求不必另外轉換成Pandas。
[embed]import pyspark library and create spark object
資料直轉橫

原始資料表
首先建立所需資料表,並將資料表轉成spark dataframe。利用createOrReplaceTempView直接轉view並執行SQL語法。
[embed]

SQL轉置後結果
直接使用pyspark,語法更加簡潔:
spark dataframe資料集.groupBy("想群組的欄位").pivot("想轉橫的欄位").sum("加總欄位").orderBy(asc("由小到大排序的欄位"))
[embed]data pivot by pyspark

pyspark data pivot result
雖然結果看起來一樣,但SQL的資料型態是pandas的dataframe,與pysaprk轉出的Spark dataframe是不一樣的類型,使用上差異也很大,千萬不要搞混囉~
資料橫轉直

年度季銷售表
[embed]

SQL資料橫轉直結果
使用pyspark的stack及expr處理:
stack(要向下展開的數量, 'key1名稱',value1,’key2名稱’,value2,....) as(key欄位名稱,value欄位名稱)
[embed]unpivot by pySpark

unpivot by pySpark result
小結:pySpark只要短短的幾句或一行,就可以折抵好幾行的SQL語法,雖然一開始使用還不太習慣,但是久了以後就會發現它的簡單強大。
參考資料:
- SQL商業資料分析術/旗標出版社/朱浚賢 譯
- https://sparkbyexamples.com/pyspark/pyspark-pivot-and-unpivot-dataframe/
메타데이터
- post_id
- 5e2f132a65e
- slug
- sql數據整理-by-pyspark-1-5e2f132a65e
- url
- https://medium.com/@tshihyi/sql%E6%95%B8%E6%93%9A%E6%95%B4%E7%90%86-by-pyspark-1-5e2f132a65e
- canonical_url
- https://medium.com/@tshihyi/sql%E6%95%B8%E6%93%9A%E6%95%B4%E7%90%86-by-pyspark-1-5e2f132a65e
- author_url
- https://medium.com/@tshihyi
- status
- ok
- fetched_at
- 2026-07-26 17:39:23