溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark SQL中怎么創(chuàng)建DataFrames

發(fā)布時間:2022-01-14 17:22:37 來源:億速云 閱讀:210 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“Spark SQL中怎么創(chuàng)建DataFrames”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark SQL中怎么創(chuàng)建DataFrames”吧!

一、Spark SQL簡介

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

為什么要學習Spark SQL?我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然后提交到集群上執(zhí)行,大大簡化了編寫MapReduce的程序的復雜性,由于MapReduce這種計算模型執(zhí)行效率比較慢。所以Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然后提交到集群執(zhí)行,執(zhí)行效率非???!同時Spark SQL也支持從Hive中讀取數(shù)據(jù)。

二、Spark SQL的特點

  • 無縫集成在Spark中,將SQL查詢與Spark程序混合。Spark SQL允許您使用SQL或熟悉的DataFrame API在Spark程序中查詢結構化數(shù)據(jù)。適用于Java、Scala、Python和R語言。

  • 提供統(tǒng)一的數(shù)據(jù)訪問,以相同的方式連接到任何數(shù)據(jù)源。DataFrames和SQL提供了一種訪問各種數(shù)據(jù)源的通用方法,包括Hive、Avro、Parquet、ORC、JSON和JDBC。您甚至可以通過這些源連接數(shù)據(jù)。

  • 支持Hive集成。在現(xiàn)有倉庫上運行SQL或HiveQL查詢。Spark SQL支持HiveQL語法以及Hive SerDes和udf,允許您訪問現(xiàn)有的Hive倉庫。

  • 支持標準的連接,通過JDBC或ODBC連接。服務器模式為業(yè)務智能工具提供了行業(yè)標準JDBC和ODBC連接。

三、核心概念:DataFrames和Datasets

  • DataFrame

DataFrame是組織成命名列的數(shù)據(jù)集。它在概念上等同于關系數(shù)據(jù)庫中的表,但在底層具有更豐富的優(yōu)化。DataFrames可以從各種來源構建,例如:

  • 結構化數(shù)據(jù)文件

  • hive中的表

  • 外部數(shù)據(jù)庫或現(xiàn)有RDDs

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

Spark SQL中怎么創(chuàng)建DataFrames

從上圖可以看出,DataFrame多了數(shù)據(jù)的結構信息,即schema。RDD是分布式的 Java對象的集合。DataFrame是分布式的Row對象的集合。DataFrame除了提供了比RDD更豐富的算子以外,更重要的特點是提升執(zhí)行效率、減少數(shù)據(jù)讀取以及執(zhí)行計劃的優(yōu)化。

  • Datasets

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

四、創(chuàng)建DataFrames

  • 測試數(shù)據(jù)如下:員工表

Spark SQL中怎么創(chuàng)建DataFrames

  • 定義case class(相當于表的結構:Schema)

case class Emp(empno:Int,ename:String,job:String,mgr:Int,hiredate:String,sal:Int,comm:Int,deptno:Int)
  • 將HDFS上的數(shù)據(jù)讀入RDD,并將RDD與case Class關聯(lián)

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查詢數(shù)據(jù)

Spark SQL中怎么創(chuàng)建DataFrames

  • 將DataFrame注冊成表(視圖)

allEmpDF.createOrReplaceTempView("emp")
  • 執(zhí)行SQL查詢

spark.sql("select * from emp").show

到此,相信大家對“Spark SQL中怎么創(chuàng)建DataFrames”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI