您好,登錄后才能下訂單哦!
本篇內容主要講解“Spark SQL中怎么創建DataFrames”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark SQL中怎么創建DataFrames”吧!
Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame并且作為分布式SQL查詢引擎的作用。
為什么要學習Spark SQL?我們已經學習了Hive,它是將Hive SQL轉換成MapReduce然后提交到集群上執行,大大簡化了編寫MapReduce的程序的復雜性,由于MapReduce這種計算模型執行效率比較慢。所以Spark SQL的應運而生,它是將Spark SQL轉換成RDD,然后提交到集群執行,執行效率非常快!同時Spark SQL也支持從Hive中讀取數據。
無縫集成在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連接。
DataFrame是組織成命名列的數據集。它在概念上等同于關系數據庫中的表,但在底層具有更豐富的優化。DataFrames可以從各種來源構建,例如:
結構化數據文件
hive中的表
外部數據庫或現有RDDs
DataFrame API支持的語言有Scala,Java,Python和R。
從上圖可以看出,DataFrame多了數據的結構信息,即schema。RDD是分布式的 Java對象的集合。DataFrame是分布式的Row對象的集合。DataFrame除了提供了比RDD更豐富的算子以外,更重要的特點是提升執行效率、減少數據讀取以及執行計劃的優化。
Dataset是數據的分布式集合。Dataset是在Spark 1.6中添加的一個新接口,是DataFrame之上更高一級的抽象。它提供了RDD的優點(強類型化,使用強大的lambda函數的能力)以及Spark SQL優化后的執行引擎的優點。一個Dataset 可以從JVM對象構造,然后使用函數轉換(map, flatMap,filter等)去操作。 Dataset API 支持Scala和Java。 Python不支持Dataset API。
測試數據如下:員工表
定義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
到此,相信大家對“Spark SQL中怎么創建DataFrames”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。