課程目錄:.SparkSession的創(chuàng)建和使用API課程培訓(xùn)
4401 人關(guān)注
(78637/99817)
課程大綱:

     .SparkSession的創(chuàng)建和使用API課程培訓(xùn)

 

 

 

在Databricks創(chuàng)建一個(gè)新Apache Spark 2.0技術(shù)預(yù)覽版集群的工作流程截圖

由于Apache Spark 2.0的終發(fā)布版尚需幾周才能出爐,本技術(shù)預(yù)覽版旨在讓大家提前預(yù)覽一下新版的功能,一方面滿足大家的好奇心,一方面也便于我們?cè)诎l(fā)布終版前多收集一些用戶反饋與bug報(bào)告。

現(xiàn)在我們來(lái)看看新的變化吧。

Spark 2.0:更簡(jiǎn)單、更、更智能

更簡(jiǎn)單:SQL與簡(jiǎn)化的APISpark讓我們引以為豪的一點(diǎn)就是所創(chuàng)建的API簡(jiǎn)單、直觀、便于使用,Spark 2.0延續(xù)了這一傳統(tǒng),并在兩個(gè)方面凸顯了優(yōu)勢(shì):1)標(biāo)準(zhǔn)的SQL支持;2)統(tǒng)一數(shù)據(jù)框(DataFrame)/數(shù)據(jù)集API。

在SQL方面,我們已經(jīng)對(duì)Spark的SQL功能做了重大拓展,引入了新的ANSI SQL解析器,并支持子查詢功能。Spark 2.0可以運(yùn)行所有99個(gè)TPC-DS查詢(需求SQL:2003中的很多功能支持)。由于SQL是Spark應(yīng)用所使用的主要接口之一,對(duì)SQL功能的拓展大幅削減了將遺留應(yīng)用移植到Spark時(shí)所需的工作。

在編程API方面,我們簡(jiǎn)化了API:

l在Scala/Java中統(tǒng)一了DataFrames與Dataset:從Spark 2.0開(kāi)始,DataFrames只是行(row)數(shù)據(jù)集的typealias了。無(wú)論是映射、篩選、groupByKey之類的類型方法,還是 select、groupBy之類的無(wú)類型方法都可用于Dataset的類。此外,這個(gè)新加入的Dataset接口是用作結(jié)構(gòu)化數(shù)據(jù)流 (Structured Streaming)的抽象,由于Python和R語(yǔ)言中的編譯時(shí)類型(compile-time type-safety)不屬于語(yǔ)言特性,數(shù)據(jù)集的概念無(wú)法應(yīng)用于這些語(yǔ)言API中。而DataFrame仍是主要的編程抽象,在這些語(yǔ)言中類似于單節(jié)點(diǎn) DataFrames的概念,可以查看數(shù)據(jù)集API手冊(cè)做些了解。

lSparkSession:這 是一個(gè)新入口,取代了原本的SQLContext與HiveContext。對(duì)于DataFrame API的用戶來(lái)說(shuō),Spark常見(jiàn)的混亂源頭來(lái)自于使用哪個(gè)“context”。現(xiàn)在你可以使用SparkSession了,它作為單個(gè)入口可以兼容兩 者。注意原本的SQLContext與HiveContext仍然保留,以支持向下兼容。

l更簡(jiǎn)單、性能更佳的Accumulator API:我們?cè)O(shè)計(jì)了一個(gè)新的Accumulator API,不但在類型層次上更簡(jiǎn)潔,同時(shí)還專門支持基本類型。原本的Accumulator API已不再使用,但為了向下兼容仍然保留。

l 基于DataFrame的機(jī)器學(xué)習(xí)API將作為主ML API出現(xiàn):在Spark 2.0中,spark.ml包及其“管道”API會(huì)作為機(jī)器學(xué)習(xí)的主要API出現(xiàn),盡管原本的spark.mllib包仍然保留,但以后的開(kāi)發(fā)重點(diǎn)會(huì)集中在基于DataFrame的API上。

l機(jī)器學(xué)習(xí)管道持久化:現(xiàn)在用戶可以保留與載入機(jī)器學(xué)習(xí)的管道與模型了,Spark對(duì)所有語(yǔ)言提供支持。

lR語(yǔ)言的分布式算法:增加對(duì)廣義線性模型(GLM)、樸素貝葉斯算法(NB算法)、存活回歸分析(Survival Regression)與聚類算法(K-Means)的支持。

速度更快:用Spark作為編譯器根據(jù)我們2015年對(duì)Spark的調(diào)查,91%的用戶認(rèn)為對(duì)Spark來(lái)說(shuō),性能是為重要的。因此,性能優(yōu)化一直是我們?cè)陂_(kāi)發(fā)Spark時(shí)所考慮的重點(diǎn)。在開(kāi)始Spark 2.0的規(guī)劃前,我們思考過(guò)這個(gè)問(wèn)題:Spark的速度已經(jīng)很快了,但能否突破極限,讓Spark達(dá)到原本速度的10倍呢?

帶著這個(gè)問(wèn)題,我們切實(shí)考慮了在構(gòu)建Spark物理執(zhí)行層面時(shí)的方式。如果深入調(diào)查現(xiàn)代的數(shù)據(jù)引擎,比如Spark或者其他MPP數(shù)據(jù)庫(kù),我們會(huì)發(fā) 現(xiàn):CPU循環(huán)大多都做了無(wú)用功,比如執(zhí)行虛擬函數(shù)調(diào)用,或者向CPU緩存或內(nèi)存讀取/寫入中間數(shù)據(jù);通過(guò)減少CPU循環(huán)中的浪費(fèi)來(lái)優(yōu)化性能,一直是我們 在現(xiàn)代編譯器上長(zhǎng)時(shí)間以來(lái)的工作重點(diǎn)。

Spark 2.0搭載了第二代Tungsten引擎,該引擎是根據(jù)現(xiàn)代編譯器與MPP數(shù)據(jù)庫(kù)的理念來(lái)構(gòu)建的,它將這些理念用于數(shù)據(jù)處理中,其主要思想就是在運(yùn)行時(shí)使 用優(yōu)化后的字節(jié)碼,將整體查詢合成為單個(gè)函數(shù),不再使用虛擬函數(shù)調(diào)用,而是利用CPU來(lái)注冊(cè)中間數(shù)據(jù)。我們將這一技術(shù)稱為“whole-stage code generation”。

在測(cè)試、對(duì)比Spark 1.6與Spark 2.0時(shí),我們列出了在單核中處理單行數(shù)據(jù)所花費(fèi)的時(shí)間(以十億分之一秒為單位),下面的表格證明了新一代Tungsten引擎的強(qiáng)大。Spark 1.6包含代碼生成技術(shù)(code generation)的使用,這一技術(shù)如今在一些的商業(yè)數(shù)據(jù)庫(kù)中也有運(yùn)用,正如我們看到的那樣,使用了新whole-stage code generation技術(shù)后,速度比之前快了一個(gè)數(shù)量級(jí)。

更智能:結(jié)構(gòu)化數(shù)據(jù)流作為個(gè)嘗試統(tǒng)一批處理與流處理計(jì)算的工具,Spark Streaming一直是大數(shù)據(jù)處理的。個(gè)流處理API叫做DStream,在Spark 0.7中初次引入,它為開(kāi)發(fā)者提供了一些很強(qiáng)大的屬性,包括:只有一次語(yǔ)義,大規(guī)模容錯(cuò),以及高吞吐。

然而,在處理了數(shù)百個(gè)真實(shí)世界的Spark Streaming部署之后,我們發(fā)現(xiàn)需要在真實(shí)世界做決策的應(yīng)用經(jīng)常需要不止一個(gè)流處理引擎。他們需要深度整合批處理堆棧與流處理堆棧,整合內(nèi)部存儲(chǔ)系 統(tǒng),并且要有處理業(yè)務(wù)邏輯變更的能力。因此,各大公司需要不止一個(gè)流處理引擎,并且需要能讓他們開(kāi)發(fā)端對(duì)端“持續(xù)化應(yīng)用”的全棧系統(tǒng)。

有一種看法是將所有一切當(dāng)作流數(shù)據(jù),也就是說(shuō)采用單一的編程模型來(lái)整合批數(shù)據(jù)與流數(shù)據(jù)。

在這種單一的模型中,有大量的問(wèn)題出現(xiàn)。先,在接收到數(shù)據(jù)的時(shí)間進(jìn)行處理非常困難,也很有局限性。其次,不同的數(shù)據(jù)分布、變動(dòng)的業(yè)務(wù)邏輯與數(shù)據(jù)延 遲都增加了實(shí)際操作的挑戰(zhàn)性。再次,大多現(xiàn)有系統(tǒng)比如MySQL或者Amazon S3都不支持流處理,大多現(xiàn)有的機(jī)器學(xué)習(xí)算法在streaming設(shè)置中都不起作用。

Spark 2.0的結(jié)構(gòu)化Streaming API是處理流數(shù)據(jù)的全新方式,源于“在流數(shù)據(jù)中計(jì)算的簡(jiǎn)單方式就是不管它們是不是流數(shù)據(jù)”。這種實(shí)現(xiàn)來(lái)源于經(jīng)驗(yàn):已經(jīng)了解如何編寫靜態(tài)數(shù)據(jù)集(即 批數(shù)據(jù))的程序員使用Spark強(qiáng)大的DataFrame/Dataset API所總結(jié)出來(lái)的經(jīng)驗(yàn)。結(jié)構(gòu)化數(shù)據(jù)流的愿景就是利用Catalyst優(yōu)化器找出:何時(shí)可以將靜態(tài)程序轉(zhuǎn)化為動(dòng)態(tài)、無(wú)限數(shù)據(jù)的增量執(zhí)行(即流處理)。當(dāng)遇 到結(jié)構(gòu)化數(shù)據(jù),比如離散表或者infinite表格時(shí),就可以簡(jiǎn)單地運(yùn)用流處理的方式。

作為這一愿景實(shí)現(xiàn)的步,Spark 2.0搭載了初始版本的結(jié)構(gòu)化流處理API,這是一個(gè)附在DataFrame/Dataset API上的(超小)擴(kuò)展包。統(tǒng)一之后,對(duì)現(xiàn)有的Spark用戶來(lái)說(shuō)使用起來(lái)非常簡(jiǎn)單,他們能夠利用在Spark 批處理API方面的知識(shí)來(lái)回答實(shí)時(shí)的新問(wèn)題。這里關(guān)鍵的功能包括:支持基于事件時(shí)間的處理,無(wú)序/延遲數(shù)據(jù),sessionization以及非流式數(shù)據(jù) 源與Sink的緊密集成。

主站蜘蛛池模板: 亚洲 欧美 综合 高清 在线| 狠狠色狠狠色综合日日不卡| 久久综合综合久久综合| 国产V综合V亚洲欧美久久| 激情综合亚洲色婷婷五月| 香蕉99久久国产综合精品宅男自| 综合欧美亚洲日本一区| 99久久国产综合精品麻豆| 欧美大战日韩91综合一区婷婷久久青草| 久久综合久久鬼色| 狠狠色色综合网站| 综合久久久久久中文字幕亚洲国产国产综合一区首| 色欲综合久久躁天天躁蜜桃| 亚洲欧美综合区自拍另类| 激情综合色综合啪啪开心| 一本色道久久88—综合亚洲精品| 天天看天天摸色天天综合网| 欧美日韩国产色综合一二三四| 麻豆精品久久精品色综合| 97久久天天综合色天天综合色hd| 狠狠色狠狠色综合| 亚洲香蕉网久久综合影视| 国产精品亚洲综合久久| 欧美日韩国产综合视频在线观看| 久久香蕉综合色一综合色88| 五月丁香六月综合欧美在线| 欧美日韩国产综合新一区| 亚洲欧美另类成人综合图片| 亚洲精品综合在线影院| 亚洲欧美精品综合中文字幕| 伊人色综合久久天天人手人婷| 亚洲香蕉网久久综合影视| 亚洲欧美成人综合在线| 伊人色综合久久天天网| 一本久久a久久精品综合香蕉| 九九久久99综合一区二区| 国产精品综合久成人| 天天综合色天天综合色hd| 亚洲欧美成人久久综合中文网| 色综合久久久久综合体桃花网| 久久精品桃花综合|