大數據之SparkSQL簡介及DataFrame的使用

  • 目錄
  • 前言:
  • 1、Spark SQL
    • 1.1、Spark SQL概述
    • 1.2、DataFrames
    • 1.3、DataFrame常用操作
  • 總結:

目錄

前言:

本文主要介紹下SparkSQL以及SparkSQL的簡單使用。這里只是做了一個非常簡單的介紹,后續工作中如果有用到相關的知識,我會再總結。

1、Spark SQL

1.1、Spark SQL概述

1.1.1、什么是Spark SQL
Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame并且作為分布式SQL查詢引擎的作用。
這里寫圖片描述

1.1.2、為什么要學習Spark SQL
我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然后提交到集群上執行,大大簡化了編寫MapReduce的程序的復雜性,由于MapReduce這種計算模型執行效率比較慢。所有Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然后提交到集群執行,執行效率非常快!
1.易整合
這里寫圖片描述
2.統一的數據訪問方式
這里寫圖片描述
3.兼容Hive
這里寫圖片描述
4.標準的數據連接
這里寫圖片描述

1.2、DataFrames

1.2.1、什么是DataFrames
與RDD類似,DataFrame也是一個分布式數據容器。然而DataFrame更像傳統數據庫的二維表格,除了數據以外,還記錄數據的結構信息即schema。同時,與Hive類似,DataFrame也支持嵌套數據類型(struct、array和map)。從API易用性的角度上 看,DataFrame API提供的是一套高層的關系操作,比函數式的RDD API要更加友好,門檻更低。由于與R和Pandas的DataFrame類似,Spark DataFrame很好地繼承了傳統單機數據分析的開發體驗。
這里寫圖片描述
1.2.2、創建DataFrames
在Spark SQL中SQLContext是創建DataFrames和執行SQL的入口,在spark-1.5.2中已經內置了一個sqlContext。

1.在本地創建一個文件,有三列,分別是id、name、age,用空格分隔,然后上傳到hdfs上

hdfs dfs -put person.txt /

2.在spark shell執行下面命令,讀取數據,將每一行的數據使用列分隔符分割

val lineRDD=sc.textFile("hdfs://node1.itcast.cn:9000/person.txt").map(_.split(" "))

3.定義case class(相當于表的schema)

case class Person(id:Int, name:String, age:Int)

4.將RDD和case class關聯

val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))

5.將RDD轉換成DataFrame

val personDF = personRDD.toDF

6.對DataFrame進行處理

personDF.show

這里寫圖片描述

1.3、DataFrame常用操作

1.3.1、DSL風格語法

//查看DataFrame中的內容
personDF.show//查看DataFrame部分列中的內容
personDF.select(personDF.col("name")).show
personDF.select(col("name"), col("age")).show
personDF.select("name").show//打印DataFrame的Schema信息
personDF.printSchema
//查詢所有的name和age,并將age+1
personDF.select(col("id"), col("name"), col("age") + 1).show
personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show

這里寫圖片描述

//過濾age大于等于18的
personDF.filter(col("age") >= 18).show

這里寫圖片描述

//按年齡進行分組并統計相同年齡的人數
personDF.groupBy("age").count().show()

這里寫圖片描述

1.3.2、SQL風格語法
如果想使用SQL風格的語法,需要將DataFrame注冊成表

personDF.registerTempTable("t_person")
//查詢年齡最大的前兩名
sqlContext.sql("select * from t_person order by age desc limit 2").show

這里寫圖片描述

//顯示表的Schema信息
sqlContext.sql("desc t_person").show

這里寫圖片描述

總結:

對于SparkSQL來說,目前博主也只是做了一個簡單的了解。希望各位通過該文章能學到以下幾點:
1、知道SparkSQL內部是將對應的SQL轉換為RDD來處理的。
2、知道SparkSQL是什么以及有什么優缺點。
3、最重要的一點是知道SparkSQL一些常用的操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456600.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python的各種推導式(列表推導式、字典推導式、集合推導式)

python的各種推導式(列表推導式、字典推導式、集合推導式) 推導式comprehensions(又稱解析式),是Python的一種獨有特性。推導式是可以從一個數據序列構建另一個新的數據序列的結構體。 共有三種推導,在Pyt…

原生js實現jquery庫中選擇器的功能(jquery庫封裝一)

今天是2017.1.1,新的一天,新的一年,新的一年里繼續夯實基礎知識,在工作中多些項目,多思考,多總結,前端是不斷更新,在更新的過程中也是發現樂趣和挑戰自我的過程,希望年輕…

Ubantu下使用vi時,方向鍵變字母輸出、退格鍵無法刪除字符的解決辦法

目錄前言:一、編輯/etc/vim/vimrc.tiny二、安裝vim full版本三、添加”.vimrc”文件 目錄 前言: 最近由于要玩TensorFlow,所以把塵封已久的Ubantu給打開了,不過配置網絡的時候,算是一團糟,出現了在插入模…

《Python爬蟲開發與項目實戰》——第3章 初識網絡爬蟲 3.1 網絡爬蟲概述

本節書摘來自華章計算機《Python爬蟲開發與項目實戰》一書中的第3章,第3.1節,作者:范傳輝著,更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 第3章 初識網絡爬蟲 從本章開始,將正式涉及Python爬蟲的開發。本章…

【python】解決:TypeError: can't send non-None value to a just-started generator

在一個生成器函數未啟動之前,是不能傳遞數值進去。必須先傳遞一個None進去或者調用一次next(g)方法,才能進行傳值操作 def product(c):# c.send(None)for i in range(5):print("生產者產生數據%d"%i)r c.send(str(i))print("消費者消費了…

Shell腳本與vi編輯器:vi啟動與退出、工作模式、命令大全

Vi簡介 Vi是一種廣泛存在于各種UNIX和Linux系統中的文本編輯程序。Vi不是排版程序,只是一個純粹的文本編輯程序。Vi是全屏幕文本編輯器,它沒有菜單,只有命令。Vi不是基于窗口的,所以,這個多用途編輯程序可以用于在任何…

windows環境下,如何在Pycharm下安裝TensorFlow環境

文章目錄目錄前言:1.安裝Anaconda2.安裝Tensorflow3.其他問題4.在pycharm中使用tensorflow目錄 前言: 最近由于工作需要要使用TensorFlow,所以只能狂補相關的知識。本來博主打算在Ubantu上玩,但是由于一些原因還是放棄了這個想法…

python面向對象實現簡易銀行管理員頁面系統【導入自定義模塊】

main.py 人 類名:Person 屬性:姓名 身份證號 電話 卡 行為:卡 類名:Card 屬性:卡號 密碼 余額 行為:銀行 類名:Bank 屬性:用戶列表 提款機提款機 類名:ATM 屬性&#xf…

[轉] dpkg-deb命令

點擊此處閱讀原文 軟件包管理 dpkg-deb命令是Debian Linux下的軟件包管理工具,它可以對軟件包執行打包和解包操作以及提供軟件包信息。 語法dpkg-deb(選項)(參數) 選項-c:顯示軟件包中的文件列表; -e:將主控信息解壓;…

《Effective Debugging:軟件和系統調試的66個有效方法》一第5條:在能夠正常運作的系統與發生故障的系統之間尋找差別...

本節書摘來自華章出版社《Effective Debugging:軟件和系統調試的66個有效方法》一書中的第1章,第1.5節,作[希]迪歐米迪斯斯賓奈里斯(Diomidis Spinellis),更多章節內容可以訪問云棲社…

如何安裝多個Python版本以及在Pycharm中切換Python版本

目錄前言: 首先要切換不同的版本,你必須先下載不同的Python版本,整個步驟如下所示:1、下載Python2.7x和Python3.5x版本2、安裝Python2.7x和Python3.5x版本3、配置環境變量,分別添加如下至path路徑4、只修改Python27&am…

【python】邏輯運算符總結

# 邏輯運算符 &#xff1a;構造復雜條件 # 優先級 not > and > or # 邏輯與 and 并且、同時 import random# a random.randint(1,5) # if a > 1 and a < 3_流程控制: # print("true") # else: # print("false") # 可以轉換為假&#…

C#中out和ref之間的區別【轉】

首先&#xff1a;兩者都是按地址傳遞的&#xff0c;使用后都將改變原來參數的數值。 其次&#xff1a;ref可以把參數的數值傳遞進函數&#xff0c;但是out是要把參數清空&#xff0c;就是說你無法把一個數值從out傳遞進去的&#xff0c;out進去后&#xff0c;參數的數值為空&am…

如何打開.ipynb文件

最近碰到文件名后綴為.ipynb文件&#xff0c;起初沒太在意這種文件格式&#xff0c;用Notepad打開之后看到也是類似于JSON格式的信息&#xff0c;以為也是為其他的一些文件服務的&#xff08;類似于配置一些HTML文件的配置文件&#xff09;。但是后來才發現這也是一種文本表示形…

《CCNP TSHOOT 300-135認證考試指南》——2.9節憑記憶完成表格和列表

本節書摘來自異步社區《CCNP TSHOOT 300-135認證考試指南》一書中的第2章&#xff0c;第2.9節憑記憶完成表格和列表&#xff0c;作者 【加】Raymond Lacoste , 【美】Kevin Wallace&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 2.9 憑記憶完成表格和列表CC…

將f2fs文件系統到磁盤

1 用git下載f2fs文件系統tools的源代碼。下載地址如下&#xff1a;http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git 具體的操作如下&#xff1a;git clone git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git 通過以…

【python】list append()和extend()區別

list append() ---》添加一個對象整體 extend() ----》添加迭代的對象 append() 添加單一元素在末尾 my_list [geeks, for] my_list.append(geeks) print(my_list) output: [geeks, for, geeks]添加一個list后&#xff0c;也是只添加一個list對象 my_list [geeks, for…

玩Python遇到的問題一二三及解決辦法

文章目錄問題一&#xff1a;python 2.7版本解決TypeError: encoding is an invalid keyword argument for this function。問題二&#xff1a;python讀取文件時提示"UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 205: illegal multibyte sequence&qu…

《MATLAB圖像處理超級學習手冊》導讀

前言 MATLAB圖像處理超級學習手冊圖像是人類獲取信息的重要來源。當今的信息化社會&#xff0c;對圖像處理和圖像分析的要求越來越高&#xff0c;現有的圖像軟件由于采購成本和功能的限制&#xff0c;已經不能完全滿足專業人士的需要&#xff0c;這時就需要專業人士來編寫自己的…

【python】SOCK_STREAM和SOCK_DGRAM兩種類型的區別【轉】

sock_stream 是有保障的(即能保證數據正確傳送到對方)面向連接的SOCKET&#xff0c;多用于資料(如文件)傳送。 sock_dgram 是無保障的面向消息的socket &#xff0c; 主要用于在網絡上發廣播信息。 SOCK_STREAM是基于TCP的&#xff0c;數據傳輸比較有保障。SOCK_DGRAM是基于U…