Spark核心——RDD

来源:http://www.cnblogs.com/softlin/archive/2016/01/09/5116835.html
-Advertisement-
Play Games

Spark中最核心的概念為 RDD(Resilient Distributed DataSets) 中文為: 彈性分散式數據集 ,RDD為對分散式記憶體對象的 抽象它表示一個 被分區不可變 且能 並行操作 的數據集;RDD為可序列化的、可緩存到記憶體對RDD進行操作過後還可以存到記憶體中,下次操作直接把內...


Spark中最核心的概念為RDD(Resilient Distributed DataSets)中文為:彈性分散式數據集,RDD為對分散式記憶體對象的 抽象它表示一個被分區不可變且能並行操作的數據集;RDD為可序列化的、可緩存到記憶體對RDD進行操作過後還可以存到記憶體中,下次操作直接把記憶體中RDD作為輸入,避免了Hadoop MapReduce的大IO操作;

RDD生成

  Spark所要處理的任何數據都是存儲在RDD之中,目前兩種方式可以生成一個RDD:
  1、從RDD進行轉換操作
  2、使用外部存儲系統創建,如:HDFS;

RDD操作

  RDD支持兩種操作:
    轉換(transformation operation)
    轉換操作將一個RDD經過操作後返回一個全新的RDD,轉換操是lazy(惰性)的這期間不會產生任何數據的計算;
    轉換函數有:distinct、filter、map、flatMap、union、groupByKey等;
    行動(action operation)
    每一個行動操作都會觸發Spark Job進行計算並返回最終的結果,行動操作有這麼幾類:返回標量,count返回元素的個數;返回Scala集合,task(n)返回0到n-1組成的集合;寫入外部存儲,saveAsHadoopFile(path)存儲到HDFS;
    行動函數有:count、top、task、saveAsHadoopFile等;
  RDD為不可變的數據集,可以使用轉換操作“修改”一個RDD,但這操作過後返回的是一個全新的RDD 原本RDD並沒有改變;

轉換圖
          RDD狀態轉換圖

Lineage

  Spark RDD只支持粗粒度的操作,對一個RDD的操作都會被作用於該RDD的所有數據;為了保證RDD的高可用性RDD通過使用Lineage(血統)記錄了RDD演變流程(從其他RDD到當前RDD所做的操作) 當RDD分區數據丟失時可以通過Lineage的信息重新計算與恢復分區數據,或進行RDD的重建;
  RDD的依賴關係(dependencies)
  由於對RDD的操作都是粗粒度的一個轉換操作過後都會產生一個新的RDD,RDD之間會形成一個前後依賴關係;Spark中存在兩種依賴:窄依賴(Narrow Dependencies)、寬依賴(Wide Dependencies);
  窄依賴(Narrow Dependencies):一個父RDD的分區只能被一個子RDD的一個分區使用;
  寬依賴(Wide Dependencies):多個子RDD的分區依賴於一個父RDD的同一個分區;
  窄依賴的節點(RDD)關係如果流水一般,所以當節點失敗後只需重新計算父節點的分區即可,寬依賴需要重新計算父節點的多個分區代價是非常昂貴的;

窄依賴
          窄依賴Narrow

寬依賴
          寬依賴Wide

參考資料:
http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf
http://spark.apache.org/docs/latest/programming-guide.html

文章首發地址:Solinx
http://www.solinx.co/archives/548


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 國際化信息又稱為本地化信息,由語言類型(如zh)和國家/地區類型來限定(如CN)。java.util.Locale是創建國際化的基礎類。spring管理國際化定義了MessageSource介面。ResourceBundleMessageSource實現了MessageSource介面。
  • 解讀Python發送郵件Python發送郵件需要smtplib和email兩個模塊。也正是由於我們在實際工作中可以導入這些模塊,才使得處理工作中的任務變得更加的簡單。今天,就來好好學習一下使用Python發送郵件吧。SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純文本郵件、HT...
  • 轉載自http://blog.163.com/wb_zhaoyuwei/blog/static/183075439201261764454791/當我們自己的程式需要處理配置文件時(比如xml文件或properties文件),通常會遇到兩個問題: (1)我的配置文件應該放在哪裡? (2)怎麼我的.....
  • 提要08 自定義裝飾類09 LineNumberReader10 MyLineNumberReader11 位元組流File讀寫操作12 拷貝圖片13 位元組流的緩衝區14 自定義位元組流的緩衝區-read和write的特點15 讀取鍵盤錄入08 自定義裝飾類 1 /*自定義裝飾設計類*/ 2 impor...
  • 使用EcStore開展分銷的網站,代理需要經常代客下單,每個客戶收貨地址都不同,要選擇和填寫多個內容才能完成地址輸入:省、市、區、詳細地址、收貨人姓名、手機電話等,非常麻煩,也容易輸入錯誤。安裝EcStore收貨地址一鍵分析插件後,就能直接複製在淘寶平臺或京東一號店平臺上的客戶收貨地址,簡單粘貼到地...
  • 題目:Two elements of a binary search tree (BST) are swapped by mistake.Recover the tree without changing its structure.Note:A solution using O(n) space ...
  • 題目:Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains onl...
  • 1.三元操作符 #includemain(){ int score; char grade; printf("input your score"); scanf("%d",&score); grade = score >= 90?'A':(score >= 60?'B':'C'); printf (...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...