天天看點

Databricks 第2篇:pyspark.sql 簡介

pyspark中的DataFrame等價于Spark SQL中的一個關系表。在pyspark中,DataFrame由Column和Row構成。

pyspark.sql.SparkSession:是DataFrame和SQL函數的主要入口

DataFrameReader:讀取資料,傳回DataFrame

DataFrameWriter:把DataFrame存儲到其他存儲系統

pyspark.sql.DataFrame、pyspark.sql.Column和 pyspark.sql.Row

在操作DataFrame之前,首先需要建立SparkSession,通過SparkSession來操作DataFrame。

1,建立SparkSession

通過Builder類來建立SparkSession,在Databricks Notebook中,spark是預設建立,表示一個SparkSession對象:

函數注釋:

master(master):用于設定要連接配接的Spark的master URL,例如local表示在本地運作,local[4] 在本地使用4核運作,

appName(name):為application設定一個名字

config(key=None, value=None, conf=None):設定SparkSession的配置選項,

getOrCreate():獲得一個已存在的或者建立一個新的SparkSession

2,從常量資料中建立DataFrame

從RDD、list或pandas.DataFrame 建立DataFrame:

3,從SQL查詢中建立DataFrame

從一個給定的SQL查詢或Table中擷取DataFrame,舉個例子:

4,SparkSession的兩個重要屬性

read:該屬性是DataFrameReader 對象,用于讀取資料,傳回DataFrame對象

readStream:該屬性是​<code>​DataStreamReader對象,用于讀取Data Stream,傳回 流式的DataFrame對象( streaming DataFrame)​</code>​

從外部存儲系統中讀取資料,傳回DataFrame對象,通常使用SparkSession.read來通路,通用文法是先調用format()函數來指定輸入資料的格式,後調用load()函數從資料源加載資料,并傳回DataFrame對象:

對于不同的格式,DataFrameReader類有細分的函數來加載資料:

還可以通過jdbc,從JDBC URL中建構DataFrame

用于把DataFrame寫入到外部存儲系統中,通過DataFrame.write來通路。

函數注釋:

format(source):指定底層輸出的源的格式

mode(saveMode):當資料或表已經存在時,指定資料存儲的行為,儲存的模式有:append、overwrite、error和ignore。

saveAsTable

(name, format=None, mode=None, partitionBy=None, **options):把DataFrame 存儲為表

save

(path=None, format=None, mode=None, partitionBy=None, **options):把DataFrame存儲到資料源中

對于不同的格式,DataFrameWriter類有細分的函數來加載資料:

把DataFrame内容存儲到源中:

把DataFrame的内容存到表中:

DataFrame等價于Spark SQL中的關系表,

1,正常操作

從parquet 檔案中讀取資料,傳回一個DataFrame對象:

從DataFrame對象傳回一列:

從DataFrame對象中row的集合:

從DataFrame對象中删除列:

2,建立臨時視圖

可以建立全局臨時視圖,也可以建立本地臨時視圖,對于local view,臨時視圖的生命周期和SparkSession相同;對于global view,臨時視圖的生命周期由Spark application決定。

3,DataFrame資料的查詢