原创 spark2 sql原理分析—執行計劃的生成和處理(QueryExecution實現概要)

概述 本文分析Dataset中的執行計劃的處理過程。執行計劃的處理包括以下幾個過程:分析邏輯執行計劃->優化邏輯執行計劃->生成一個或多個物理執行計劃->優化物理執行計劃->生成可執行代碼。 這個過程都是在dataset的成員:Q

原创 spark2實戰-使用Spark SQL的Join

概述 join操作在進行數據處理時非常常見,而spark支持多種join類型。本文對spark中多種Join類型進行說明,並對不同join的使用場景進行了介紹和舉例說明。 使用join操作的注意事項 在兩個數據集比較的列有唯一值

原创 spark2原理分析-shuffleWriter:SortShuffleWriter實現分析

概述 本文分析shuffleWriter的實現類:SortShuffleWriter的詳細實現。 ShuffleWriter抽象類 /** * Obtained inside a map task to write out re

原创 DeltaLake介紹

概述 DeltaLake是DataBricks的一個開源項目,它是帶ACID的開源存儲層,可爲數據湖(data lake)帶來可靠性。它和Spark的API完全兼容。 總體架構圖 DeltaLake的關鍵特點和優勢 ACID事務

原创 spark2原理分析-shuffleWriter之BypassMergeShuffleWriter實現分析

概述 本文分析shuffleWriter的實現類:BypassMergeSortShuffleWriter的詳細實現原理。 BypassMergeSortShuffleWriter介紹 BypassMergeSortShuffle

原创 如何在spark-shell中調試運行scala文件

概述 本文講述如何通過spark-shell來調試scala代碼文件,這樣不需要IDE就可以對scala文件進行調試,在代碼量較小的情況下比較適用。 方法1:使用:load 命令 有時候爲了在spark-shell中調試一段代碼,

原创 spark sql實戰—如何把聚合操作用到多個列上

概述 有時我們希望某個聚合操作,比如:sum,avg等,能夠作用到多個列上,也就是一次計算一個或多個列的聚合值。這樣可以簡化我們的代碼。 本文講述如何在實戰中把聚合操作使用到多個列上。 實戰 19.如何把聚合函數使用到多個列上?

原创 spark rdd實戰—分區器(Partitioner)的理解和使用

概述 在《spark2原理分析-RDD的Partitioner原理分析》一文中,我們瞭解了分區器的基本概念,本文通過實際的例子來進一步理解分區器的概念,並學習如何使用分區器。 分區器的使用場景 分區器在類型爲(k,v)的RDD時使

原创 JanusGraph的架構介紹

概述 本文講述JanusGraph的基本架構設計。 JanusGraph概況 JanusGraph是一個圖數據庫引擎。JanusGraph專注於壓縮的圖序列化,豐富的圖數據建模和高效的查詢執行。此外,JanusGraph利用Had

原创 JanusGraph實戰-使用模式說明

概述 本文介紹JanusGraph的使用模式和基本的配置。 JanusGraph的兩種使用方式 JanusGraph有兩使用模式: 把JanusGraph作爲依賴包嵌入到應用中。 JanusGraph作爲服務運行。 在實際情況

原创 spark2實戰-使用checkpoint保存和讀取還原RDD

概述 本文講述如何使用checkpoint來保存rdd,並讀取還原rdd的數據。 checkpoint簡介 checkpoint可以把rdd持久化到磁盤上,可以是本地磁盤也可以是外部存儲系統(比如:hadoop文件系統)。 要注意

原创 spark sql實戰—拆分數據

拆分的數據 有時在進行數據時我們需要把一列數據分割成多列數據,把一個字段值,分割成多個值。本節介紹如何通過spark sql提供的函數來進行數據的分割。 1. 數據拆分概述 數據拆分操作 在進行數據處理時,通常我們需要對數據進行拆

原创 Spark Sql實戰--合併數據

數據的合併 概述 本文介紹如何通過spark sql對數據進行各種的合併操作,包括:列合併,行合併,相同key的合併等等。 在實際的數據處理場景中,數據的合併操作非常常用,這裏介紹如何通過spark sql來完成常用的合併操作。

原创 深入淺出RDD Persist和Cache

前面已經介紹了persist和cache的基本原理。那麼RDD是如何進行persist和cache操作的呢? Persist RDD如何執行 從實現層面,persist()函數只是對RDD的storageLevel(存儲級別)進行