中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Apache Spark2.0的核心結構是什么

發布時間:2022-01-14 17:04:16 來源:億速云 閱讀:127 作者:iii 欄目:云計算

這篇文章主要介紹“Apache Spark2.0的核心結構是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Apache Spark2.0的核心結構是什么”文章能幫助大家解決問題。

DataFrames, Datasets 以及 Spark SQL

在步驟3中,你已經了解到彈性分布式數據集(RDDs)——它們構成了Spark的核心數據抽象概念,是其他所有更高層次數據抽象和API、包括DataFrame和數據集的基礎。

在Spark2.0,在RDDs之上的DataFrame和數據集形成了核心的高層和結構化的分布式數據抽象。DataFrame在Spark里被叫做數據列(data column),它們可以執行組織數據的計劃,以及數據處理或者描述運算、發布查詢。數據集更進一步,提供了一個嚴格的編譯時類型的安全保障,所以特定類型的錯誤在編譯時就會被發現,而不是在運行時。

Apache Spark2.0的核心結構是什么

憑借數據結構和數據類型,Spark可以理解你將如何進行描述運算,哪些指定類型的列或者特定名稱的字段將會訪問你的數據,以及你將使用哪些特定操作的作用域。然后,Spark將會通過Spark 2.0’s Catalyst optimizer優化你的代碼,通過Project Tungsten生成高效的字節代碼。

DataFrame和數據集為多種高級編程語言提供了API,讓你的代碼更易讀,以及支持高階函數比如filter, sum, count, avg, min, max等等。不管你用Spark SQL還是Python、Java、Scala或者R來表達你的計算指令,底層的代碼生成是完全一致的,因為所有的執行的計劃都是通過同一Catalyst優化器。

例如,Scala的作用域專用代碼或者它SQL里對應的相關查詢會生成完全相同的代碼。比如下方會有一個數據集Scala項目叫做Person,以及一個SQL表格“Person”。

// a dataset object Person with field names fname, lname, age, weight
// access using object notation
val seniorDS = peopleDS.filter(p=>p.age > 55)
// a dataframe with structure with named columns fname, lname, age, weight
// access using col name notation
Val seniorDF = peopleDF.where(peopleDF("age") > 55)
// equivalent Spark SQL code
val seniorDF = spark.sql("SELECT age from person where age > 35")

為什么Spark結構化數據很重要,為什么DataFrame、數據集、Spark SQL提供了一個高效的Spark編碼方式,如果你希望了解這些,可以通過鏈接(https://youtu.be/1a4pgYzeFwE )的視頻尋找答案。

##五、GraphFrame的圖形處理

盡管Spark有一個通用的基于RDD的圖形處理庫GraphX,可以優化分布式計算以及支持圖形算法,它仍有一些挑戰——沒有Java和Python API,基于低層的RDD API。由于這些問題,它不能通過Project Tungsten 和Catalyst Optimizer享受到最近引入的性能優化。

相比之下,基于DataFrame的圖處理庫GraphFrames解決了所有問題:它提供了一個類似于GraphX的庫但是有著更高的層級,更易讀和可讀的API,支持Java, Scala 和Python;可以保存和下載圖形;利用了Spark2.0的底層性能和查詢的優化。此外,它集成了GraphX。這意味著你可以無縫地將圖處理庫GraphFrames轉換成等效的GraphX表示。

在下圖中,這些城市有各個機場代號,所有頂點可以表示成DataFrame的排;同樣地,所有邊也可以看做DataFrame的排,它們有著各自的名字和類型的列。總的來說,這些DataFrame的頂點和邊構成了一個圖處理庫GraphFrames。

Apache Spark2.0的核心結構是什么

// create a Vertices DataFrame
val vertices = spark.createDataFrame(List(("JFK", "New York", "NY"))).toDF("id", "city", "state")
// create a Edges DataFrame
val edges = spark.createDataFrame(List(("JFK", "SEA", 45, 1058923))).toDF("src", "dst", "delay", "tripID")
// create a GraphFrame and use its APIs
val airportGF = GraphFrame(vertices, edges)
// filter all vertices from the GraphFrame with delays greater an 30 mins
val delayDF = airportGF.edges.filter("delay > 30")
// Using PageRank algorithm, determine the Airport ranking of importance
val pageRanksGF = airportGF.pageRank.resetProbability(0.15).maxIter(5).run()
display(pageRanksGF.vertices.orderBy(desc("pagerank")))

使用GraphFrame可以表達三種強大的查詢。首先是簡單的SQL類型的關于點和邊的查詢,比如怎么樣的路線可能會導致重大延遲。第二,圖形類型查詢,比如有多少頂點傳入有多少邊傳出。第三,主題查詢,通過提供一個結構化的模型或者路徑的頂點和邊,找到在圖形中的數據集的模型。

此外,圖處理庫GraphFrames可以很輕松地支持GraphX所有圖形算法。例如,使用PageRank找到所有重要的點,或者決定從起點到目的地的最短路徑,或者執行一個廣度優先搜索(BFS),或者為探索聯絡關系確定強聯系的點。

在網絡研討會中(http://go.databricks.com/graphframes-dataframe-based-graphs-for-apache-spark )中,Spark的社區貢獻者Joseph Bradley給大家介紹了使用圖處理庫GraphFrames進行圖像處理的動機和易用性,以及基于DataFrame的API的好處。作為研討會的一部分,你也將了解到使用圖處理庫GraphFrames的便捷,以及上述所有類型的查詢和算法。

Apache Spark 2.0和許多Spark的組件,包括機器學習MLlib和Streaming,因為性能提升、易用性和高層次的抽象及結構,越來越傾向于提供等效的DataFrame API。在必要或者適合的用例中,你可以選擇使用圖處理庫GraphFrames來代替GraphX。下圖是一個GraphX和圖處理庫GraphFrames之間簡潔的總結和比較。

Apache Spark2.0的核心結構是什么

圖處理庫GraphFrames必會發展得越來越快。新版本的GraphFrame將作為Spark的一個包和Spark2.0兼容。

關于“Apache Spark2.0的核心結構是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

AI

霍州市| 广昌县| 磐安县| 昂仁县| 鄂托克前旗| 上犹县| 九江县| 连山| 三亚市| 汝州市| 鸡泽县| 海口市| 通许县| 隆安县| 三原县| 河北省| 当涂县| 岐山县| 隆德县| 滦平县| 句容市| 临安市| 绥棱县| 荣成市| 淄博市| 郓城县| 巢湖市| 慈溪市| 宁河县| 甘洛县| 钟祥市| 伊通| 邻水| 宁化县| 喜德县| 海林市| 金阳县| 太白县| 鄂尔多斯市| 托里县| 壶关县|