一、spark sql的基礎:
1、spark sql的簡介
spark sql is apache spark』s module for working with structured data
spark sql 是apache spark用來出來結構化資料的模組
特點:(1)容易整合成,安裝好spark後就帶有spark sql了
(2)統一的資料訪問介面dataframe
(3)相容hive
(4)支援標準的資料訪問方式:jdbc,odbc
2、sparksql的核心資料模型是dataframe:它的表現形式其實也是rdd
表(dataframe) = 表結構(schema) + 資料(rdd)
3、建立dataframe:dataframe僅支援dsl語句
(1)樣本類case class
示例(使用員工表):
a、建立樣本型別
case class emp(empno:int,ename:string,job:string,mgr:int,hiredate:string,sal:int,comm:int,deptno:int)
返回乙個defined class emp表示這個類已經定義好了
b、 讀一乙個資料(我們可以從hdfs上讀取,因為是示例所以我們直接本地檔案上讀取了)
我們可以看到rdd裡邊是乙個陣列型別val lines=sc.
textfile
("/root/training/emp.csv").
map(_.
split
(","
))
c、把陣列型別的rdd對映成rdd[emp]
d、轉化成spark sql的核心資料模型dataframeval emp=lines.
map(x=
>
emp(x(
0).toint,x(
1),x
(2),
x(3)
.toint,x(
4),x
(5).toint,x(
6).toint,x(
7).toint)
)
val df=emp.todf
然後我們可以檢視表結構,可以使用dsl語句操作dataframe
//檢視表結構
查詢所有的資料
也可查詢具體的幾個字段
4、建立檢視(要用到sparksession物件)
在sparkshell客戶端開啟的時候就自動建立了倆個物件,乙個sparkcontext物件叫sc,乙個是sparksession物件叫spark
建立檢視是為了我們使用標準的sql語句來操作dataframe,因為dataframe僅支援dsl語句,所以我們需要把dataframe轉換成檢視來用標準語句進行操作。
檢視又分為區域性檢視和全域性檢視
區域性檢視:僅在當前session中有效
全域性檢視:可以在不同的session中訪問,單獨建立在global_temp的命名空間中
df.df.
createglobaltempview
("emp2"
)
但是這裡查詢語句稍微和區域性檢視有點區別,因為他是建立在global_temp命名空間下的
我們先看一下異常語句
spark.
sql(
"select * from emp2"
).show
org.apache.spark.sql.analysi***ception: table or view not found: emp2; line 1 pos 14
他就會報乙個這樣的錯,這是我們寫的sql語句的問題
這樣就正常了。然後我們看看區域性檢視和全域性檢視的區別,然後我們在當前spark-shell下重新的開啟乙個session
spark.newsession.
sql(
"select * from emp1"
).show
我們執行區域性檢視的語句的時候就會出現這樣的錯誤
然後我們新開個session執行全域性檢視查詢
這回就正常了
spark學習筆記6
pyspark.sql.dataframe物件的方法 aggr sparkdf.agg 對列的聚合操作 print aggr.collect print sparkdf.colregex w spark version 2.3 選擇列名符合正規表示式的列 print sparkdf.columns ...
Spark學習(一)之Spark初識
1.spark歷史及簡介 spark是乙個實現快速通用的集群計算平台。它是由加州大學伯克利分校amp實驗室 開發的通用記憶體平行計算框架,用來構建大型的 低延遲的資料分析應用程式。它擴充套件了廣泛使用的mapreduce計算模型。12年正式開源,距今6年歷史。spark執行架構的設計 cluster...
Spark學習之 Spark SQL 一
感謝大牛的系列文章,本文只是本人學習過程的記錄,首先向大神致敬 1.建立檔案people.json 2.上傳到hdfs檔案系統 目錄位置 data people.json hdfs dfs put people.json data3.在hdfs中檢視檔案是否完整,如下 root hd 02 hdfs...