【趙強老師】什麼是Spark SQL?

来源:https://www.cnblogs.com/collen7788/archive/2020/07/02/13225581.html
-Advertisement-
Play Games

一、Spark SQL簡介 Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame並且作為分散式SQL查詢引擎的作用。 為什麼要學習Spark SQL?我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然後提交到集群上執行,大大簡化 ...


一、Spark SQL簡介

Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame並且作為分散式SQL查詢引擎的作用。

為什麼要學習Spark SQL?我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然後提交到集群上執行,大大簡化了編寫MapReduce的程式的複雜性,由於MapReduce這種計算模型執行效率比較慢。所以Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然後提交到集群執行,執行效率非常快!同時Spark SQL也支持從Hive中讀取數據。

二、Spark SQL的特點

  • 無縫集成在Spark中,將SQL查詢與Spark程式混合。Spark SQL允許您使用SQL或熟悉的DataFrame API在Spark程式中查詢結構化數據。適用於Java、Scala、Python和R語言。
  • 提供統一的數據訪問,以相同的方式連接到任何數據源。DataFrames和SQL提供了一種訪問各種數據源的通用方法,包括Hive、Avro、Parquet、ORC、JSON和JDBC。您甚至可以通過這些源連接數據。
  • 支持Hive集成。在現有倉庫上運行SQL或HiveQL查詢。Spark SQL支持HiveQL語法以及Hive SerDes和udf,允許您訪問現有的Hive倉庫。
  • 支持標準的連接,通過JDBC或ODBC連接。伺服器模式為業務智能工具提供了行業標準JDBC和ODBC連接。

三、核心概念:DataFrames和Datasets

  • DataFrame

DataFrame是組織成命名列的數據集。它在概念上等同於關係資料庫中的表,但在底層具有更豐富的優化。DataFrames可以從各種來源構建,例如:

  • 結構化數據文件
  • hive中的表
  • 外部資料庫或現有RDDs

DataFrame API支持的語言有Scala,Java,Python和R。

從上圖可以看出,DataFrame多了數據的結構信息,即schema。RDD是分散式的 Java對象的集合。DataFrame是分散式的Row對象的集合。DataFrame除了提供了比RDD更豐富的運算元以外,更重要的特點是提升執行效率、減少數據讀取以及執行計劃的優化。

  • Datasets

Dataset是數據的分散式集合。Dataset是在Spark 1.6中添加的一個新介面,是DataFrame之上更高一級的抽象。它提供了RDD的優點(強類型化,使用強大的lambda函數的能力)以及Spark SQL優化後的執行引擎的優點。一個Dataset 可以從JVM對象構造,然後使用函數轉換(map, flatMap,filter等)去操作。 Dataset API 支持Scala和Java。 Python不支持Dataset API。

四、創建DataFrames

  • 測試數據如下:員工表

  • 定義case class(相當於表的結構:Schema)
case class Emp(empno:Int,ename:String,job:String,mgr:Int,hiredate:String,sal:Int,comm:Int,deptno:Int)
  • 將HDFS上的數據讀入RDD,並將RDD與case Class關聯
val lines = sc.textFile("hdfs://bigdata111:9000/input/emp.csv").map(_.split(","))
  • 把每個Array映射成一個Emp的對象
val 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))
  • 生成DataFrame
val allEmpDF = emp.toDF
  • 通過DataFrames查詢數據

  • 將DataFrame註冊成表(視圖)
allEmpDF.createOrReplaceTempView("emp")
  • 執行SQL查詢
spark.sql("select * from emp").show


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 更換Ubuntu國內鏡像源: 由於Ubuntu官方軟體倉庫伺服器位於國外,導致我們國內訪問體驗非常糟糕,下載網速只有200-300k左右,令人淚目。 所以我們需要將系統預設下載地址配置為國內的鏡像源,以此提高用戶體驗。 準備工作: 備份源文件: cp /etc/apt/sources.list /e ...
  • 高密度MRAM具有非常低的功率,高的讀取速度,非常高的數據保留能力和耐久性,適用於廣泛的應用。單元面積僅為0.0456平方微米,讀取速度為10ns,讀取功率為0.8mA/MHz/b,在低功耗待機模式(LPSB)下,其在25C時的泄漏電流小於55mA,相當於每比特的漏電流僅為1.7E-12A。對於32 ...
  • 1>拉取鏡像 docker pull elasticsearch:7.6.2 2>創建數據掛在目錄,以及配置ElasticSearch集群配置文件 mkdir /docker/ES mkdir /docker/ES/data1 mkdir /docker/ES/data2 mkdir /docker ...
  • Docker安裝單機版ELK日誌收集系統 概述 現在Elasticsearch是比較火的, 很多公司都在用. 而Docker也正如火如荼, 所以我就使用了Docker來安裝ELK, 這裡會詳細介紹下安裝的細節以及需要註意的地方. 先來強調一下, Elasticsearch和Kibana必須用相同版本 ...
  • 技術棧:python + scrapy + tor 為什麼要單獨開這麼一篇隨筆,主要還是在上一篇隨筆"一個小爬蟲的整體解決方案"(https://www.cnblogs.com/qinyulin/p/13219838.html)中沒有著重介紹Scrapy,包括後面幾天也對代碼做了Review,優化了 ...
  • du -sh #統計當前目錄的大小,以直觀方式展現 du -h --max-depth=1 #查看當前目錄下所有一級子目錄文件夾大小 du -h --max-depth=1 | sort #查看當前目錄下所有一級子目錄文件夾大小併排序 du -h --max-depth=1 | grep [TG] ...
  • 參見:https://www.cnblogs.com/Dylansuns/p/6974272.html Linux安裝JDK完整步驟檢查一下系統中的jdk版本[hadoop@master ~]$ java -versionopenjdk version "1.8.0_222-ea"OpenJDK R... ...
  • 前言 閑暇之時,羚羊給大家分享一下羚羊在Centos7 下安裝Cloudera Manager 6.3.0和cloudera cdh 6.3.2的過程和安裝過程中遇到的坑。至於為什麼要選擇CDH,Cloudera Manager和cdh是什麼,之間又是什麼關係,在這裡羚羊就不做介紹了。 為什麼選擇C ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...