SlideShare a Scribd company logo
使用 Spark 計算 Differential
Expression
Jian-Long Huang
2015/11/26
[分析] 同一個RNA序列檔,可任選其中兩個 conditions 進行 differential analysis (最
好能擴展成任選兩個 groups of conditions) 輸出 gene list。
Yeast 基因表現檔
Group Condition File
1 eXpress-66.txt
1 eXpress-67.txt
1 eXpress-68.txt
2 eXpress-69.txt
2 eXpress-70.txt
2 eXpress-71.txt
寫個 script 分析?
程式分析流程
1. 建立 gene name, group, condition 和 expression value 的對應表。
2. 根據每條 gene,計算:
a. c1 = merge(c1-1 to c1-3), c2 = merge(c2-1 to c2-3)
b. de = diff(c1, c2)
3. 輸出符合 de > t1 or de < t2 的 gene。
gene_name group (condition) file_id fpkm
YNL087W 1 66 1.175314e+02
YNL087W 1 67 1.357084e+02
YNL087W 1 68 1.268189e+02
YNL087W 2 69 6.900545e+01
YNL087W 2 70 6.410089e+01
YNL087W 2 71 6.238413e+01
問題?
● 計算速度慢
○ 無法即時查詢
○ 過濾條件隨時更改
● 對記憶體資源掌控差
Apache Spark
● 開源叢集運算框架。
● 最初由加州大學柏克萊分校AMPLab所開發,後捐贈 Apache 基金會。
● 使用記憶體內運算技術,將中間結果保存在記憶體內進行分析運算。
● 提供高階 API (Scala, Java, Python and R) 進行程式設計。
● 提供交互式 Scala, Python shell。
Resilient Distributed Dataset (RDD) 彈性分散式資料集
● 一種抽象資料結構,任何資料在 Spark 中都被表示為 RDD
● 分散式記憶體,資料分散儲存在多個機器上面。
● 具備高階函數如 filter, map, reduce,可以進行併行操作。
● RDD 建立方法
○ 從已存在 RDD 建立
○ 從文件系統或 HDFS 的文件建立
filter
v1, v2, v3, v4, v5 func(x) => true/false v1, v3, v5
map
v1, v2, v3, v4, v5 func(x) => x’ v1’, v2’, v3’, v4’, v5’
reduceByKey
(k1, v1)
(k1, v2)
(k1, v3)
(k2, v1)
(k2, v2)
(k3, v1)
(k3, v2)
func(x, y) => z
(k1, u)
(k2, u)
(k3, u)
aggregateByKey
(k1, v1)
(k1, v2)
(k2, v1)
(k2, v2)
(k3, v1)
(k3, v2)
1st: seqOp(zeroValue, y) => z
next: seqOp(x, y) => z
combOp(x, y) => z
zeroValue (starting value)
(k1, u)
(k2, u)
(k3, u)
Combine partitions
Combine values in a partition
reduceByKey vs. aggregateByKey
● aggregateByKey 可以設定初始值,且返回值的類型不需要和 RDD 中 value 的
類型一致,但 reduceByKey 返回值類型需要一致。
● 用途:
○ reduceByKey 適用於值與值之間計算不需要按順序,如連乘、連加。
○ aggregateByKey 適用於需利用多個值之計算,如計算平均需要 sum 和 count 兩種值。
mapValues
(k1, v1)
(k1, v2)
(k2, v1)
(k2, v2)
func(x) => x’
(k1, v1’)
(k1, v2’)
(k2, v1’)
(k2, v2’)
join
(k1, v1)
(k1, v2)
(k2, v3)
(k2, v4)
(k1, u1)
(k1, u2)
(k2, u3)
(k3, u4)
join
(k1, (v1, u1))
(k1, (v1, u2))
(k1, (v2, u1))
(k1, (v2, u2))
(k2, (v3, u3))
(k2, (v4, u3))
Other RDD Actions
● count(): 返回 elements 數量
● first(): 返回第一個 element
● take(n): 返回前 n 個 element
● collect(): 返回陣列類型值
File
Spark workflow 1: FPKM average in a condition
line1
line2
line3
line4
line5
File
File
(YNL087W, 1.175314e+02)
(YKR061W, 3.579905e+01)
(YOR316C-A, 3.258783e+01)
(YGR274C, 2.608256e+02)
(YER126C, 2.694234e+01)
filter, map
(YNL087W, (380.05, 3))
(YKR061W, (78.57, 3))
(YOR316C-A, (0.0, 3))
(YGR274C, (101.61, 3))
(YER126C, (771.36, 3))
aggregateByKey
(YNL087W, 126.68)
(YKR061W, 26.19)
(YOR316C-A, 0.0)
(YGR274C, 33.87)
(YER126C, 257.12)
mapValues
計算 FPKM 總和
和 condition 數
移除 header,輸
出 name-fpkm
pair
計算 FPKM 平均
Spark workflow 2: Differential expression
(YNL087W, 126.68)
(YKR061W, 26.19)
(YOR316C-A, 0.0)
(YGR274C, 33.87)
(YER126C, 257.12)
(YNL087W, 77.68)
(YKR061W, 31.19)
(YOR316C-A, 2.1)
(YGR274C, 34.87)
(YER126C, 259.12)
join
(YNL087W, (126.68, 77.68))
(YKR061W, (26.19, 31.19))
(YOR316C-A, (0.0, 2.1))
(YGR274C, (33.87, 34.87))
(YER126C, (257.12, 559.12))
(YNL087W, 1.63)
(YKR061W, 0.83)
(YOR316C-A, 0)
(YGR274C, 0.97)
(YER126C, 0.45)
mapValues
(YER126C, 0.45)
filter
計算 differential
expression
(fpkm1 / fpkm2)
合併兩個 group
移除沒有差異
表現的結果
安裝 Spark 和 IPython Notebook
● docker-spark
● docker run -it -p 8088:8088 -p 8042:8042 -p 8080:8080 -h mr-spark --name
mr-spark -v /home/jlhg/mapreduce:/share sequenceiq/spark:1.5.1 bash
● Container 內建 Python 版本為 2.6,用 pyenv 安裝 Python 2.7
● 安裝 IPython:pip install ipython[all]
● 啟動 IPython Notebook:IPYTHON_OPTS="notebook --ip=mr-spark --
port=8080" /usr/local/spark/bin/pyspark
● Web UI: http://<host_ip>:8080
Example script
spark-de.py: https://gist.github.com/jlhg/56a3d833a7cc4ce3238c
# Put yeast data to HDFS
$ hdfs dfs -put /share/yeast
# Submit spark task
$ spark-submit /share/spark-de.py
參考資料
● Spark Quick Start (Official)
● Spark Programming Guide (Official)
● Spark 編程指南繁體中文版
● Spark RDD API详解(一) Map和Reduce
● How to more efficiently calculate the averages for each KEY in a Pairwise (K,
V) RDD in Apache Spark with Python
● Spark函数讲解:aggregateByKey
● 在Docker上用 IPython 開發 Spark的環境建置

More Related Content

What's hot

in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
景隆 張
 
Introduction and Internals of SQL on hadoop by WangHaihua
Introduction and Internals of SQL on hadoop by WangHaihuaIntroduction and Internals of SQL on hadoop by WangHaihua
Introduction and Internals of SQL on hadoop by WangHaihua
Wang Haihua
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点maclean liu
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
Cabin WJ
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
kao kuo-tung
 
图解分布式一致性协议Paxos 20150311
图解分布式一致性协议Paxos 20150311图解分布式一致性协议Paxos 20150311
图解分布式一致性协议Paxos 20150311
Cabin WJ
 
主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题
haojiewang
 
AWS Lambda Multi-Cloud Practices
AWS Lambda Multi-Cloud PracticesAWS Lambda Multi-Cloud Practices
AWS Lambda Multi-Cloud Practices
康志強 大人
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1
Zianed Hou
 
GC算法和IE中JS内存泄露
GC算法和IE中JS内存泄露GC算法和IE中JS内存泄露
GC算法和IE中JS内存泄露
xwcoder
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
zhaolinjnu
 
人人网技术架构的演进
人人网技术架构的演进人人网技术架构的演进
人人网技术架构的演进Laobiao Li
 
Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
bluedavy lin
 
揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing
Yi-Jun Zheng
 
Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行nigel889
 
Lua gc代码
Lua gc代码Lua gc代码
Lua gc代码Wei Sun
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitasking
yarshure Kong
 

What's hot (20)

in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Introduction and Internals of SQL on hadoop by WangHaihua
Introduction and Internals of SQL on hadoop by WangHaihuaIntroduction and Internals of SQL on hadoop by WangHaihua
Introduction and Internals of SQL on hadoop by WangHaihua
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
 
图解分布式一致性协议Paxos 20150311
图解分布式一致性协议Paxos 20150311图解分布式一致性协议Paxos 20150311
图解分布式一致性协议Paxos 20150311
 
移動內存算法
移動內存算法移動內存算法
移動內存算法
 
主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题主备备的两个备机转为双Master出现诡异的slave lag问题
主备备的两个备机转为双Master出现诡异的slave lag问题
 
AWS Lambda Multi-Cloud Practices
AWS Lambda Multi-Cloud PracticesAWS Lambda Multi-Cloud Practices
AWS Lambda Multi-Cloud Practices
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1
 
GC算法和IE中JS内存泄露
GC算法和IE中JS内存泄露GC算法和IE中JS内存泄露
GC算法和IE中JS内存泄露
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
人人网技术架构的演进
人人网技术架构的演进人人网技术架构的演进
人人网技术架构的演进
 
Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
 
揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing
 
Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行
 
Lua gc代码
Lua gc代码Lua gc代码
Lua gc代码
 
Network and Multitasking
Network and MultitaskingNetwork and Multitasking
Network and Multitasking
 

Similar to 使用 Spark 計算 differential expression

CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
Jian-Kai Wang
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學
NUTC, imac
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)Yan Li
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
Chun-Ming Chang
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
Chun-Min Chang
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
台灣資料科學年會
 
香港六合彩
香港六合彩香港六合彩
Fux8923
Fux8923Fux8923
香港六合彩
香港六合彩香港六合彩
香港六合彩
deygsi
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
Sheng-Han Su
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
jhao niu
 
Scilab introduction(Scilab 介紹)
Scilab introduction(Scilab 介紹)Scilab introduction(Scilab 介紹)
Scilab introduction(Scilab 介紹)
JIANG MING-LI
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
Jifeng Deng
 
Ecma script3
Ecma script3 Ecma script3
Ecma script3 gniavaj
 

Similar to 使用 Spark 計算 differential expression (15)

CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
 
Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學Spark 巨量資料處理基礎教學
Spark 巨量資料處理基礎教學
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Fux8923
Fux8923Fux8923
Fux8923
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
Scilab introduction(Scilab 介紹)
Scilab introduction(Scilab 介紹)Scilab introduction(Scilab 介紹)
Scilab introduction(Scilab 介紹)
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 
Ecma script3
Ecma script3 Ecma script3
Ecma script3
 
Ch7
Ch7Ch7
Ch7
 

More from Drake Huang

The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1
Drake Huang
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
Drake Huang
 
Software Testing Project: Testing csmap program
Software Testing Project: Testing csmap programSoftware Testing Project: Testing csmap program
Software Testing Project: Testing csmap program
Drake Huang
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
Drake Huang
 
A Short Guide to the E-utilities
A Short Guide to the E-utilitiesA Short Guide to the E-utilities
A Short Guide to the E-utilities
Drake Huang
 
Introduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdminIntroduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdmin
Drake Huang
 

More from Drake Huang (6)

The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1The Rails 4 Way Chapter 1
The Rails 4 Way Chapter 1
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
 
Software Testing Project: Testing csmap program
Software Testing Project: Testing csmap programSoftware Testing Project: Testing csmap program
Software Testing Project: Testing csmap program
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
A Short Guide to the E-utilities
A Short Guide to the E-utilitiesA Short Guide to the E-utilities
A Short Guide to the E-utilities
 
Introduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdminIntroduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdmin
 

使用 Spark 計算 differential expression

  • 1. 使用 Spark 計算 Differential Expression Jian-Long Huang 2015/11/26
  • 2. [分析] 同一個RNA序列檔,可任選其中兩個 conditions 進行 differential analysis (最 好能擴展成任選兩個 groups of conditions) 輸出 gene list。
  • 3. Yeast 基因表現檔 Group Condition File 1 eXpress-66.txt 1 eXpress-67.txt 1 eXpress-68.txt 2 eXpress-69.txt 2 eXpress-70.txt 2 eXpress-71.txt
  • 5. 程式分析流程 1. 建立 gene name, group, condition 和 expression value 的對應表。 2. 根據每條 gene,計算: a. c1 = merge(c1-1 to c1-3), c2 = merge(c2-1 to c2-3) b. de = diff(c1, c2) 3. 輸出符合 de > t1 or de < t2 的 gene。
  • 6. gene_name group (condition) file_id fpkm YNL087W 1 66 1.175314e+02 YNL087W 1 67 1.357084e+02 YNL087W 1 68 1.268189e+02 YNL087W 2 69 6.900545e+01 YNL087W 2 70 6.410089e+01 YNL087W 2 71 6.238413e+01
  • 7. 問題? ● 計算速度慢 ○ 無法即時查詢 ○ 過濾條件隨時更改 ● 對記憶體資源掌控差
  • 8. Apache Spark ● 開源叢集運算框架。 ● 最初由加州大學柏克萊分校AMPLab所開發,後捐贈 Apache 基金會。 ● 使用記憶體內運算技術,將中間結果保存在記憶體內進行分析運算。 ● 提供高階 API (Scala, Java, Python and R) 進行程式設計。 ● 提供交互式 Scala, Python shell。
  • 9. Resilient Distributed Dataset (RDD) 彈性分散式資料集 ● 一種抽象資料結構,任何資料在 Spark 中都被表示為 RDD ● 分散式記憶體,資料分散儲存在多個機器上面。 ● 具備高階函數如 filter, map, reduce,可以進行併行操作。 ● RDD 建立方法 ○ 從已存在 RDD 建立 ○ 從文件系統或 HDFS 的文件建立
  • 10. filter v1, v2, v3, v4, v5 func(x) => true/false v1, v3, v5
  • 11. map v1, v2, v3, v4, v5 func(x) => x’ v1’, v2’, v3’, v4’, v5’
  • 12. reduceByKey (k1, v1) (k1, v2) (k1, v3) (k2, v1) (k2, v2) (k3, v1) (k3, v2) func(x, y) => z (k1, u) (k2, u) (k3, u)
  • 13. aggregateByKey (k1, v1) (k1, v2) (k2, v1) (k2, v2) (k3, v1) (k3, v2) 1st: seqOp(zeroValue, y) => z next: seqOp(x, y) => z combOp(x, y) => z zeroValue (starting value) (k1, u) (k2, u) (k3, u) Combine partitions Combine values in a partition
  • 14. reduceByKey vs. aggregateByKey ● aggregateByKey 可以設定初始值,且返回值的類型不需要和 RDD 中 value 的 類型一致,但 reduceByKey 返回值類型需要一致。 ● 用途: ○ reduceByKey 適用於值與值之間計算不需要按順序,如連乘、連加。 ○ aggregateByKey 適用於需利用多個值之計算,如計算平均需要 sum 和 count 兩種值。
  • 15. mapValues (k1, v1) (k1, v2) (k2, v1) (k2, v2) func(x) => x’ (k1, v1’) (k1, v2’) (k2, v1’) (k2, v2’)
  • 16. join (k1, v1) (k1, v2) (k2, v3) (k2, v4) (k1, u1) (k1, u2) (k2, u3) (k3, u4) join (k1, (v1, u1)) (k1, (v1, u2)) (k1, (v2, u1)) (k1, (v2, u2)) (k2, (v3, u3)) (k2, (v4, u3))
  • 17. Other RDD Actions ● count(): 返回 elements 數量 ● first(): 返回第一個 element ● take(n): 返回前 n 個 element ● collect(): 返回陣列類型值
  • 18. File Spark workflow 1: FPKM average in a condition line1 line2 line3 line4 line5 File File (YNL087W, 1.175314e+02) (YKR061W, 3.579905e+01) (YOR316C-A, 3.258783e+01) (YGR274C, 2.608256e+02) (YER126C, 2.694234e+01) filter, map (YNL087W, (380.05, 3)) (YKR061W, (78.57, 3)) (YOR316C-A, (0.0, 3)) (YGR274C, (101.61, 3)) (YER126C, (771.36, 3)) aggregateByKey (YNL087W, 126.68) (YKR061W, 26.19) (YOR316C-A, 0.0) (YGR274C, 33.87) (YER126C, 257.12) mapValues 計算 FPKM 總和 和 condition 數 移除 header,輸 出 name-fpkm pair 計算 FPKM 平均
  • 19. Spark workflow 2: Differential expression (YNL087W, 126.68) (YKR061W, 26.19) (YOR316C-A, 0.0) (YGR274C, 33.87) (YER126C, 257.12) (YNL087W, 77.68) (YKR061W, 31.19) (YOR316C-A, 2.1) (YGR274C, 34.87) (YER126C, 259.12) join (YNL087W, (126.68, 77.68)) (YKR061W, (26.19, 31.19)) (YOR316C-A, (0.0, 2.1)) (YGR274C, (33.87, 34.87)) (YER126C, (257.12, 559.12)) (YNL087W, 1.63) (YKR061W, 0.83) (YOR316C-A, 0) (YGR274C, 0.97) (YER126C, 0.45) mapValues (YER126C, 0.45) filter 計算 differential expression (fpkm1 / fpkm2) 合併兩個 group 移除沒有差異 表現的結果
  • 20. 安裝 Spark 和 IPython Notebook ● docker-spark ● docker run -it -p 8088:8088 -p 8042:8042 -p 8080:8080 -h mr-spark --name mr-spark -v /home/jlhg/mapreduce:/share sequenceiq/spark:1.5.1 bash ● Container 內建 Python 版本為 2.6,用 pyenv 安裝 Python 2.7 ● 安裝 IPython:pip install ipython[all] ● 啟動 IPython Notebook:IPYTHON_OPTS="notebook --ip=mr-spark -- port=8080" /usr/local/spark/bin/pyspark ● Web UI: http://<host_ip>:8080
  • 21. Example script spark-de.py: https://gist.github.com/jlhg/56a3d833a7cc4ce3238c # Put yeast data to HDFS $ hdfs dfs -put /share/yeast # Submit spark task $ spark-submit /share/spark-de.py
  • 22. 參考資料 ● Spark Quick Start (Official) ● Spark Programming Guide (Official) ● Spark 編程指南繁體中文版 ● Spark RDD API详解(一) Map和Reduce ● How to more efficiently calculate the averages for each KEY in a Pairwise (K, V) RDD in Apache Spark with Python ● Spark函数讲解:aggregateByKey ● 在Docker上用 IPython 開發 Spark的環境建置