DataFrame編程模型初談與Spark SQL

 

  Spark SQL在Spark內核基礎上提供了對結構化數據的處理,在Spark1.3版本中,Spark SQL不只能夠做爲分佈式的SQL查詢引擎,還引入了新的DataFrame編程模型。html

  在Spark1.3版本中,Spark SQL再也不是Alpha版本,除了提供更好的SQL標準兼容以外,還引進了新的組件DataFrame。同時,Spark SQL數據源API也實現了與新組件DataFrame的交互,容許用戶直接經過Hive表、Parquet文件以及一些其餘數據源生成DataFrame。用戶能夠在同一個數據集上混合使用SQL和DataFrame操做符。新版本還提供了從JDBC讀寫表的能力,能夠更原生地支持Postgres、MySQL及其餘RDBMS系統。sql

  Spark SQL全部功能的入口點是SQLContext,或它的一個子類。只須要一個SparkContext實例就能夠構建一個基本的SQLContext。shell

package cn.spark.study.sql數據庫

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContextapache

/**
* @author Administrator
*/
object DataFrameCreate {

def main(args: Array[String]) {
val conf = new SparkConf()
.setAppName("DataFrameCreate")
.setMaster("local");
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)

// val df = sqlContext.read.json("hdfs://spark1:9000/students.json")//從hdfs

// val df = sqlContext.read.json("./data/people.json")
val df = sqlContext.read.json("./data/aa.json")
//Spark DataFrame小試牛刀,見https://segmentfault.com/a/1190000002614456
//Spark DataFrames入門指南:建立和操做DataFrame,見http://blog.csdn.net/lw_ghy/article/details/51480358
//建立dataframe ,就是把數據 和數據元封裝一塊兒 造成一個數據表。
//spark DataFrame用法,見http://blog.csdn.net/dreamer2020/article/details/51284789
//RDD與DataFrame的轉換,見http://www.cnblogs.com/namhwik/p/5967910.html

df.show()

}

}編程

 

//輸入
//{"name":"Michael"}
//{"name":"Andy", "age":30}
//{"name":"Justin", "age":19}json


//輸出
//+----+-------+
//| age| name|
//+----+-------+
//|null|Michael|
//| 30| Andy|
//| 19| Justin|
//+----+-------+segmentfault

 

 


//輸入
//{"name":"中國","provinces":[{"name":"黑龍江","citys":["佳木斯","大慶","哈爾濱","齊齊哈爾","牡丹江"]},{"name":"遼寧","citys":["瀋陽","大連","盤錦"]},{"name":"吉林","citys":["吉林市","長春市","四平市"]}]}app


//輸出
//+----+--------------------+
//|name| provinces|
//+----+--------------------+
//| 中國|[[WrappedArray(佳木...|
//+----+--------------------+分佈式

 

 

 

  再次強調,spark-shell除了幫咱們構建了SQLContext實例外,還幫咱們導入了隱式轉換:import sqlContext.implicits._。在以spark-submit方式提交的應用程序中,須要手動導入該隱式轉換才能訪問某些API。

 

  DataFrame編程模型極大地簡化了Spark SQL的編程複雜度。

  Spark SQL容許Spark執行用SQL語言,HiveQL語言或者Scala語言表示的關係查詢。在Spark1.3以前,這個模塊的核心是SchemaRDD類型。SchemaRDD由行(Row)對象組成,行對象經過scheme來描述行中每一列的數據類型。

  而在Spark1.3中,開始引入了DataFrame來重命名SchemaRDD類型,在Spark1.3中,DataFrame是一個以命名列方式組織的分佈式數據集,在概念上相似於關係型數據庫中的一個表,也至關於R/Python中的Dta Frames。DataFrame能夠由結構化數據文件轉換獲得,或從Hive中的表得來,也能夠轉換自外部數據庫或現有的RDD

 

 

 

 

  DataFrame編程模型具備的功能特性有:

  一、從KB到PB級的數據量支持

  二、多種數據格式和多種存儲系統支持

  三、經過Spark SQL的Catalyst優化器進行先進的優化,生成代碼

  四、位Python、Java、Scala和R語言(Spark R)提供API。

相關文章
相關標籤/搜索