發表文章

目前顯示的是 2月, 2018的文章

[SPARK] RDD, Action 和 Transformation (2)

圖片
在Spark中, 資料的基本架構為 RDD (Resilient Distributed Dataset), RDDs 可以使用 Hadoop InputFormats (例如 HDFS 文件) 創建, 也可以從其他的 RDDs 轉換. 我們可以簡單的從一個文字檔建立 RDD, 例如: scala> val textFile = sc.textFile("README.md") 基本上, 就是從文字檔中建立一個 RDD 物件, 此時, 該 RDD 物件已經轉換成 string array 的格式, 可以透過: scala> textFile.collect() 查看, RDD 仍保有HDFS的特性, 也就是 key-value 的格式, 在 textFile 這個 RDD 中, key 就是第幾行, value 則是每行的數值, 對於所有的 RDD, 我們都有兩種操作: action 和 transformation, RDD 的 actions 從 RDD 中返回值, transformations 可以轉換成一個新 RDD 並返回它的引用. 如下圖表示: https://stackoverflow.com/questions/39311616/transformation-process-in-apache-spark

[SPARK] RDD, Action 和 Transformation (1)

圖片
在之前介紹 SparkPi 程式時, 我們看到兩個特殊的指令: map, reduce. 我們先列出 官方指南 中的介紹: map (func): Return a new distributed dataset formed by passing each element of the source through a function func. reduce (func): Aggregate the elements of the dataset using a function func (which takes two arguments and returns one). The function should be commutative and associative so that it can be computed correctly in parallel. 簡單來說, map 就是對數據進行運算, 得到一組轉換的結果, 在 SparkPi 中, 所做的對應是藉由 Monte Carlo 方式, 取得 0 或 1的數值, 而 reduce 則是聚集數據集中的所有元素, 定義為: 對兩個參數運算, 回報一個結果, 在 SparkPi 中, 把兩個數值相加, 回報相加結果. 特別的是, 在 Spark 中, map, reduce 分屬不同類別, map 是 transformations, 而 reduce 是 actions, 定義如下: transformations, which create a new dataset from an existing one actions, which return a value to the driver program after running a computation on the dataset.

[SPARK] Spark基本介紹

圖片
寫了一些Spark的文章, 才發現自己還沒介紹過Spark, 於是, 就把之前自己整理的一些資料放上來, 當作Spark的介紹, 在介紹中, 我將著重在Stream和ML部分的比較, 這也是未來在研究Spark時會比較重視的部分, Apache Spark 是由UC Berkeley AMP 實驗室所開發的雲端運算框架, 用來構建大型的, 低延遲的資料分析系統. 比較起其他雲端運算架構, 像是IBM的InfoSphere, 或是Strom的流計算, Spark繼承了MapReduce中根據資料位置移動計算的精神 (moves compute processes to the data), 並在此架構上, 引進了記憶體層 (in-memory) 計算的概念, 提供使用者對於暫存資料的控管, 減低在迭代時所需要的資料存取時間. 來自:  https://ogirardot.wordpress.com/2015/05/29/rdds-are-the-new-bytecode-of-apache-spark/

[SPARK] Spark範例: 以SparkPi為例

圖片
Spark提供以下三種程式寫作方式: python, scala, 以及java 其中, scala是其原生支援的程式語言, 理論上來說, 應該有最簡潔的架構與語法, 於是, 我們就從scala出發, 來看看SparkPi是如何撰寫, 以下是SparkPi的程式, 來自: spark/examples/src/main/scala/org/apache/spark/examples/SparkPi.scala

[SPARK] Spark的編譯環境: 以SparkPi為例

在 上一篇文章 中, 我們介紹了如何安裝單機版的Spark, 接下來, 為了要撰寫Spark程式, 我們要先建立Spark的編譯環境, 此時, 就要用到SBT這個套件, SBT (Simple Build Tool) 是Scala的編譯器, 有興趣可以參考:  https://www.scala-sbt.org/ 接下來, 我們就要重新創一個專案, 重新執行之前範例中的SparkPi, 我們主要參考以下連結: https://console.bluemix.net/docs/services/AnalyticsforApacheSpark/spark_app_example.html 因為有一些修改, 就把指令紀錄如下: 一開始, 先建立專案的資料夾, 把SparkPi移入, mkdir -p ~/spark-submit/project mkdir -p ~/spark-submit/src/main/scal cp /usr/lib/spark/examples/src/main/scala/org/apache/spark/examples/SparkPi.scala ~/spark-submit/src/main/scala/SparkPi.scala 接著, 設定SBT的環境: vim ~/spark-submit-example/build.sbt 貼上以下內容 (空行必須保留, Scala的版本號記得修改): name := "SparkPi" version := "1.0" scalaVersion := " 2.11.6 " libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.2" libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.1.2" resolvers += "Akka Repository" at "http://repo.akka.io/

[SPARK] 安裝 Spark 2.1.2 測試環境

圖片
在很久以前, 曾經裝了一次 Spark 1.6 , 不過, 後來因為時間緣故, 就沒有繼續玩下去, 現在重新開始, Spark也到2.2版了, 於是就重新安裝並建立單機的測試環境開始, 希望能夠介紹一系列的Spark基礎. 主要的安裝過程參考這篇: 大數據運算系列:SPARK FOR UBUNTU LTS 16.04 安裝指引 想說這篇文章寫得很詳細就不重複列出過程了, 基本上指令複製貼上就可以完成, 有興趣安裝可以直接去引用連結, 或是去之前Spark 1.6的文章連結, 兩者只差在Spark 1.6版沒有安裝SBT, 不過, 在這篇引用文章中, 仍有一些錯誤 (或是混淆), 於是幫忙澄清一下:

LTE筆記: beamforming 和 precoding (2)

圖片
在這篇文章中, 我們將依據此篇文章的說明, 解釋 beamforming 和 precoding 其中的差異: http://ma-mimo.ellintech.se/2017/10/03/what-is-the-difference-between-beamforming-and-precoding/ 在最寬廣的意義上, beamforming 和 precoding 是一致的, 兩者都在多天線的架構下, 以MIMO的通訊架構, 並基於接收端不同位置的通道資訊, 透過資料的預先處理, 提高接收端的SINR, 以及系統效能, 但若是我們進一步細分, 則可以把 beamforming在分成兩種: digital beamforming 和 analog beamforming, 如下圖所示: 來自:  http://ma-mimo.ellintech.se/2017/10/03/what-is-the-difference-between-beamforming-and-precoding/ 其中, 數位 beamforming 就是 上一篇文章 中說的 precoding 技術, 該技術為每一根天線的資料設計 precoder, 並分別在每一個天線上傳輸不同資料, 而類比 beamforming 則是一般指涉的 beamforming 技術, 此時, 每一根天線的資料都相同, 差異的只有資料間的相位差,

LTE筆記: beamforming 和 precoding (1)

圖片
對於MIMO (Multi-input Multi-output) 系統來說, beamforming和precodeing都是重要的干擾抑制技術, 然而, 這兩個詞語, 卻也在一定程度上造成混淆和誤用, 在這一系列文章中, 我們將嘗試解釋其中差別, 在介紹beamforming和precodeing兩者差異之前, 我們先簡短介紹一下MIMO, MIMO簡短來說, 就是傳送端和接收端都有多根天線, 而不同的天線之間, 就有不同的通道, 如下圖所示: 來自: https://zh.wikipedia.org/wiki/MIMO