老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

SQL、Pandas和Spark常用數據查詢操作對比

本篇內容介紹了“SQL、Pandas和Spark常用數據查詢操作對比”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

閔行網站建設公司成都創新互聯公司,閔行網站設計制作,有大型網站制作公司豐富經驗。已為閔行上千余家提供企業網站建設服務。企業網站搭建\外貿網站建設要多少錢,請找那個售后服務好的閔行做網站的公司定做!

01 SQL標準查詢

談到數據,必會提及數據庫;而提及數據庫,則一般指代關系型數據庫(RMDB),操作關系型數據庫的語言則是SQL(Structured  Query  Language)。SQL本質上仍然屬于一種編程語言,并且有著相當悠久的歷史,不過其語法特性卻幾乎沒怎么變更過,從某種意義上講這也體現了SQL語言的過人之處。

SQL、Pandas和Spark常用數據查詢操作對比

在最新TIOBE排行榜中,SQL位居第10位

一般而言,一句標準的SQL語句按照書寫順序通常含有如下關鍵詞:

  • select:指定查詢字段

  • distinct:對查詢結果字段進行去重

  • from:明確查詢的數據庫和表

  • join on:指定查詢數據源自多表連接及條件

  • where:設置查詢結果過濾條件

  • group by:設置分組聚合統計的字段

  • having:依據聚合統計后的字段進一步過濾

  • order by:設置返回結果排序依據

  • limit:限定返回結果條數

這是一條SQL查詢語句中所能涉及的主要關鍵字,經過解析器和優化器之后,最后的執行過程則又與之差別很大,執行順序如下:

  • from:首先找到待查詢的表

  • join on:如果目標數據表不止一個,則對多表建立連接關系

  • where:根據查詢條件過濾數據記錄

  • group by:對過濾結果進行分組聚合

  • having:對分組聚合結果進行二次過濾

  • select:對二次過濾結果抽取目標字段

  • distinct:根據條件進行去重處理

  • order by:對去重結果進行排序

  • limit:僅返回排序后的指定條數記錄

曾經,個人一度好奇為何不將SQL語句的書寫順序調整為與執行順序一致,那樣更易于理解其中的一些技術原理,但查詢資料未果后,就放棄了……

當然,本文的目的不是介紹SQL查詢的執行原理或者優化技巧,而僅僅是對標SQL查詢的幾個關鍵字,重點講解在Pandas和Spark中的實現。

02  Pandas和Spark實現SQL對應操作

以下按照SQL執行順序講解SQL各關鍵字在Pandas和Spark中的實現,其中Pandas是Python中的數據分析工具包,而Spark作為集Java、Scala、Python和R四種語言的通用分布式計算框架,本文默認以Scala語言進行講述。

1)from。由于Python和Scala均為面向對象設計語言,所以Pandas和Spark中無需from,執行df.xxx操作的過程本身就蘊含著from的含義。

2)join on。join on在SQL多表查詢中是很重要的一類操作,常用的連接方式有inner join、left join、right  join、outer join以及cross join五種,在Pandas和Spark中也都有相應關鍵字。

Pandas:Pandas實現join操作有兩個主要的API:merge和join。其中merge是Pandas的頂層接口(即可直接調用pd.merge方法),也是DataFrame的API,支持豐富的參數設置,主要介紹如下:

def merge(     left,  # 左表     right,  # 右表     how: str = "inner",  # 默認連接方式:inner     on=None,  # SQL中on連接一段,要求左表和右表中 公共字段     left_on=None,  # 設置左表連接字段     right_on=None,  # 設置右表連接字段     left_index: bool = False,  # 利用左表索引作為連接字段     right_index: bool = False,  # 利用右表索引作為連接字段     sort: bool = False,  # join結果排序     suffixes=("_x", "_y"),  # 非連接字段有重名時,可s何止后綴     copy: bool = True,      indicator: bool = False,     validate=None, ) -> "DataFrame":

上述參數中,可以設置on連接條件的方式主要有3種:即若連接字段為兩表共有字段,則可直接用on設置;否則可分別通過left_on和right_on設置;當一個表的連接字段是索引時,可設置left_index為True。

與merge操作類似,join可看做是merge的一個簡化版本,默認以索引作為連接字段,且僅可通過DataFrame來調用,不是Pandas的頂級接口(即不存在pd.join方法)。

另外,concat也可通過設置axis=1參數實現橫向兩表的橫向拼接,但更常用于縱向的union操作。

Spark:相較于Pandas中有多種實現兩個DataFrame連接的方式,Spark中接口則要單一許多,僅有join一個關鍵字,但也實現了多種重載方法,主要有如下3種用法:

// 1、兩個DataFrame有公共字段,且連接條件只有1個,直接傳入連接列名 df1.join(df2, "col") // 2、有多個字段,可通過Seq傳入多個字段 df1.join(df2, Seq("col1", "col2") // 3、兩個DataFrame中連接字段不同名,此時需傳入判斷連接條件 df1.join(df2, df1("col1")===df2("col2")) // 注意,上述連接條件中,等于用===,不等于用=!=

3)where。數據過濾在所有數據處理流程中都是重要的一環,在SQL中用關鍵字where實現,在Pandas和Spark中也有相應的接口。

Pandas。Pandas中實現數據過濾的方法有多種,個人常用的主要是如下3類:

  • 通過loc定位操作符+邏輯判斷條件實現篩選過濾。loc是用于數據讀取的方法,由于其也支持傳入邏輯判斷條件,所以自然也可用于實現數據過濾,這也是日常使用中最為頻繁一種;

  • 通過query接口實現,提起query,首先可能想到的便是SQL中Q,實際上pandas中的query實現的正是對標SQL中的where語法,在實現鏈式篩選查詢中非常好用,具體可參考Pandas用了一年,這3個函數是我的最愛……

  • where語句,Pandas以API豐富而著稱,所以自然是不會放過where關鍵字的,不過遺憾的是Pandas中的where和Numpy中的where一樣,都是用于對所有列的所有元素執行相同的邏輯判斷,可定制性較差。

Spark。Spark中實現數據過濾的接口更為單一,有where和filter兩個關鍵字,且二者的底層實現是一致的,所以實際上就只有一種用法。但在具體使用中,where也支持兩種語法形式,一種是以字符串形式傳入一個類SQL的條件表達式,類似于Pandas中query;另一種是顯示的以各列對象執行邏輯判斷,得到一組布爾結果,類似于Pandas中loc操作。

4)group by。group  by關鍵字用于分組聚合,實際上包括了分組和聚合兩個階段,由于這一操作屬于比較規范化的操作,所以Pandas和Spark中也都提供了同名關鍵字,不同的是group  by之后所接的操作算子不盡相同。

Pandas:Pandas中groupby操作,后面可接多個關鍵字,常用的其實包括如下4類:

  • 直接接聚合函數,如sum、mean等;

  • 接agg函數,并傳入多個聚合函數;

  • 接transform,并傳入聚合函數,但不聚合結果,即聚合前有N條記錄,聚合后仍然有N條記錄,類似SQL中窗口函數功能,具體參考Pandas中groupby的這些用法你都知道嗎?

  • 接apply,實現更為定制化的函數功能,參考Pandas中的這3個函數,沒想到竟成了我數據處理的主力

Spark:Spark中的groupBy操作,常用的包括如下3類:

  • 直接接聚合函數,如sum、avg等;

  • 接agg函數,并傳入多個聚合算子,與Pandas中類似;

  • 接pivot函數,實現特定的數據透視表功能。

5)having。在SQL中,having用于實現對聚合統計后的結果進行過濾篩選,與where的核心區別在于過濾所用的條件是聚合前字段還是聚合后字段。而這在Pandas和Spark中并不存在這一區別,所以與where實現一致。

6)select。選擇特定查詢結果,詳見Pandas vs Spark:獲取指定列的N種方式。

7)distinct。distinct在SQL中用于對查詢結果去重,在Pandas和Spark中,實現這一操作的函數均為drop_duplicates/dropDuplicates。

8)order by。order by用于根據指定字段排序,在Pandas和Spark中的實現分別如下:

Pandas:sort_index和sort_values,其中前者根據索引排序,后者根據傳入的列名字段排序,可通過傳入ascending參數控制是升序還是降序。

Spark:orderBy和sort,二者也是相同的底層實現,功能完全一致。也是通過傳入的字段進行排序,可分別配合asc和desc兩個函數實現升序和降序。

// 1、指定列+desc df.orderBy(df("col").desc) // 2、desc函數加指定列 df.orderBy(desc("col"))

9)limit。limit關鍵字用于限制返回結果條數,這是一個功能相對單一的操作,二者的實現分別如下:

Pandas:可分別通過head關鍵字和iloc訪問符來提取指定條數的結果;

Spark:直接內置了limit算子,用法更接近SQL中的limit關鍵字。

10)Union。SQL中還有另一個常用查詢關鍵字Union,在Pandas和Spark中也有相應實現:

Pandas:concat和append,其中concat是Pandas  中頂層方法,可用于兩個DataFrame縱向拼接,要求列名對齊,而append則相當于一個精簡的concat實現,與Python中列表的append方法類似,用于在一個DataFrame尾部追加另一個DataFrame;

Spark:Spark中直接模仿SQL語法,分別提供了union和unionAll兩個算子實現兩個DataFrame的縱向拼接,且含義與SQL中完全類似。

03  小節

對標SQL標準查詢語句中的常用關鍵字,重點對Pandas和Spark中相應操作進行了介紹,總體來看,兩個計算框架均可實現SQL中的所有操作,但Pandas實現的接口更為豐富,傳參更為靈活;而Spark則接口更為統一,但一般也支持多種形式的方法重載。另外,Spark中的算子命名與SQL更為貼近,語法習慣也與其極為相似,這對于具有扎實SQL基礎的人快速學習Spark來說會更加容易。

“SQL、Pandas和Spark常用數據查詢操作對比”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!


分享標題:SQL、Pandas和Spark常用數據查詢操作對比
文章地址:http://www.xueling.net.cn/article/gceiod.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产CHINESEXXXXDIANJIANFEN| 日日射视频| 国产日产欧产精品 | 亚洲欧洲一二区 | 欧美日韩在线不卡 | 成人在线播放网址 | 国产91区精品福利在线社区 | 欧美日韩免费一久久亚洲色WWW成人小说 | 亚洲性色av一区二区三区 | 国产偷ⅴ国产偷v精品 | 日本免费无遮挡毛片的意义 | 国产精品白丝久久av网站 | 国产精品久久久久久久久免费蜜臀 | 5566先锋影音夜色资源站在线观看 | 男人天堂黄色 | 久久九九全国免费精品观看 | 久久综合五月丁香六月丁香 | 99精品欧美一区 | 亚洲国产成人精品无码区99 | 国产成人精品免费视频大全 | 色婷婷综合久色 | 国产精品美女视频免费观看软件 | 一区二区三区视频观看 | 一区免费视频 | 欧美精品99 | 天天干夜夜拍 | av毛片在线观看地址 | 日本人又黄又爽又大又色 | 精品欧美日韩国产日漫一区不卡 | 色五月婷婷成人网 | 免费观看av网站 | 亚洲日本精品国产第一区 | 中国毛茸茸性XXXX | 网站啪啪| 日韩欧美在线综合 | 亚洲国产另类 | 每日在线更新av | 久久久久爽人综合网站 | 黄色视频网站在线观看免费 | 国产精品啊啊啊 | BBW丰满大肥奶肥婆 成人在线中文字幕 |