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資料的查詢