成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為何Spark在編程界越來越吃香?Spark將成為數(shù)據(jù)科學家的統(tǒng)一平臺

大數(shù)據(jù) Spark
統(tǒng)計科學家使用交互式的統(tǒng)計工具(比如R)來回答數(shù)據(jù)中的問題,獲得全景的認識。與之相比,數(shù)據(jù)工程師則更像一名程序員,他們在服務器上編寫代碼,創(chuàng)建和應用機器學習模型,熟悉C++和Java等系統(tǒng)級語言,經(jīng)常需要和企業(yè)級數(shù)據(jù)中心的某些組件打交道,比如Hadoop。

前言

統(tǒng)計科學家使用交互式的統(tǒng)計工具(比如R)來回答數(shù)據(jù)中的問題,獲得全景的認識。與之相比,數(shù)據(jù)工程師則更像一名程序員,他們在服務器上編寫代碼,創(chuàng)建和應用機器學習模型,熟悉C++和Java等系統(tǒng)級語言,經(jīng)常需要和企業(yè)級數(shù)據(jù)中心的某些組件打交道,比如Hadoop。

而有的數(shù)據(jù)科學家專注于更細的領域,就像精通R但從未聽說過Python或者scikit-learn(反之亦然),即便兩者都提供了豐富的統(tǒng)計庫。(文末附有驚喜!)

Spark相比其他工具

如果可以提供一種統(tǒng)一的工具,運行在統(tǒng)一的架構,用統(tǒng)一的語言編程,并可以同時滿足統(tǒng)計科學家和數(shù)據(jù)工程師的需求,那該多好啊。難道為了研究數(shù)據(jù),我就必須去學一種像Python或R的語言?我一直使用傳統(tǒng)的數(shù)據(jù)分析工具,難道為了應對大規(guī)模計算,就必須去懂MapReduce?正是統(tǒng)計工具的不完美造就了這種局面:

  • R提供了一個豐富的統(tǒng)計分析和機器學習的解釋器。但R難以在分布式條件下執(zhí)行數(shù)據(jù)的分析和清洗,以便開展其所擅長的數(shù)據(jù)分析,也不以一種主流的開發(fā)語言為人所知。
  • Python是-種通用的編程語言,也不乏出色的第三方數(shù)據(jù)分析庫(像Pandas和scikit-learn),但Python也有和R一樣的缺陷:只能局限在處理單機能負載的數(shù)據(jù)量。
  • 在經(jīng)典的MapReduce計算框架上開發(fā)分布式的機器學習算法是可行的(參考Mahout),但程序員需要從零開始,更別說移植復雜計算的難度。
  • 為降低復雜計算移植到MapReduce的難度,Crunch 提供一個簡單的、傻瓜式的Java API,但MapReduce天生決定了它在迭代計算方面是低效的,盡管大多數(shù)機器學習算法都需要迭代計算。 
為何Spark在編程界越來越吃香?Spark將成為數(shù)據(jù)科學家的統(tǒng)一平臺

Spark的優(yōu)勢

Spark是一個超有潛力的通用數(shù)據(jù)計算平臺,無論是對統(tǒng)計科學家還是數(shù)據(jù)工程師。大部分人討論到Spark時,總是注意到將數(shù)據(jù)駐留內存以提高計算效率的方面(相對MapReduce),Spark 擁有許多的特征,使之真正成為一個融合統(tǒng)計科學和數(shù)據(jù)工程的交叉點:

  • Spark附帶了一個機器學習庫MLib,雖然只是在初始階段。
  • Spark是用Scala語言編寫的,運行在Java虛擬機上,同時也提供像R和Python的命令行解釋器。
  • 對Java程序員,Scala 的學習曲線是比較陡峭的,但所幸Scala可以兼容一切的Java庫。
  • Spark的RDD(彈性分布式數(shù)據(jù)集),是Crunch開發(fā)者熟知的--種數(shù)據(jù)結構。
  • Spark模仿了Scala 的集合計算API,對Java和Scala開發(fā)者來說耳熟能詳,而Python開發(fā)者也不難上手,而Scala對統(tǒng)計計算的支持也不錯。
  • Spark和其底層的Scala語言,并不只是為機器學習而誕生的,除此之外,像數(shù)據(jù)訪問、日志ETL和整合都可以通過API輕松搞定。就像Python,你可以把整個數(shù)據(jù)計算流程搬到Spark平臺.上來,而不僅僅是模型擬合和分析。

在命令行解釋器中執(zhí)行的代碼,和編譯后運行的效果相同。而且,命令行的輸入可以得到實時反饋,你將看到數(shù)據(jù)透明地在集群間傳遞與計算。

Spark和MLib還有待完善整個項目有不少bug,效率也還有提升的空間,和YARN的整合也存在問題。Spark還沒辦法提供像R那樣豐富的數(shù)據(jù)分析函數(shù)。但Spark已然是世界上最好的數(shù)據(jù)平臺,足以讓來自任何背景的數(shù)據(jù)科學家側目。 

為何Spark在編程界越來越吃香?Spark將成為數(shù)據(jù)科學家的統(tǒng)一平臺

Stack Overflow問題的自動標注

Stack Overflow是一個著名的軟件技術問答平臺,在上面提的每個問題有可能被打上若干個短文本的標簽,比如java或者sql,我們的目標在于建立一.套系統(tǒng),使用ALS推薦算法,為新問題的標簽提供預測和建議。從推薦系統(tǒng)的角度,你可以把問題想象成user,把標簽想象成item。

首先,從Stack Overflow下載官方提供的截至20140120的問答數(shù)據(jù)

  1. sta ckoverflow. com-Posts. 7z 

這是一個能夠直接用于分布式計算的bzip格式文件,但在我們的場景下,必須先解壓并拷

貝到HDFS

  1. bzcat stackover flow. com-Posts.7z| hdfs dfs -put一/user /srowen/ Posts. xml 

解壓后的文件大約是24.4GB,包含210萬個問題,1800 萬個回答,總共標注了930萬個標簽,這些標簽排重之后大概是34000個。

確認機器安裝了Spark 之后,輸入spark-shell即可打開Scala的REPL環(huán)境。首先,我們讀取一個存儲在HDFS的Posts. xm文件:

  1. val postsXML = sC. textFile("hdfs:/ //user /srowen/Posts. xml"

這時命令行工具會返回:

  1. postsXML: org. apache. spark.rdd.RDD[String] = MappedRDD[1] at textFile at :12 

顯示文本文件已轉化為一個String型的RDD,你可以通過調用RDD的函數(shù),實現(xiàn)任意的查詢運算。比如統(tǒng)計文件的行數(shù):

  1. postsXML. count 

這條指令生成大量的輸出,顯示Spark正在利用分布式的環(huán)境計數(shù),最終打印出18066983。

下一步,將XML文件的每- -行都存入形如(questionID, tag)的元組。得益于Scala的函數(shù)式編程的風格,RDD和Scala集合-樣可以使用map等方法: 

  1. val postIDTags = postsXML. flatMap { line =>  
  2. // Matches Id=".. ."  
  3. Tags="..." in line  
  4. val idTagRegex = "Id=\"(\\d+)\". +Tags=\"([^\"]+)\"".r  
  5. // // Finds tags like <TAG> value from above  
  6. val tagRegex = "<([^&]+)>".r  
  7. // Yields 0 or 1 matches:  
  8. idTagRegex. findFirstMatchIn(line) match {  
  9. // No match -- not a line  
  10. case None => None  
  11. // Match, and can extract ID and tags from m  
  12. case Some(m) => {  
  13. val postID = m. group(1) . toInt  
  14. val tagsString = m. group(2)  
  15. // Pick out just TAG matching group  
  16. val tags = tagRegex. findAllMatchIn(tagsString)。map(_ . group  
  17. (1)) . toList  
  18. // Keep only question with at least 4 tags, and map to (pos  
  19. t,tag) tuples  
  20. if (tags.size >= 4) tags . map( (postID,_)) else None  
  21.  
  22.  
  23. // Because of flatMap,individual lists will concatenate  
  24. // into one collection of tuples  

你會發(fā)現(xiàn)這條指令的執(zhí)行是立即返回的,而不像count一樣需要等待,因為到目前為止,Spark并未啟動任何主機間的數(shù)據(jù)變換。

ALS的MLib實現(xiàn)必須使用數(shù)值ID而非字符串作為惟一標識,而問題的標簽數(shù)據(jù)是字符串格式的,所以需要把字符串哈希成一個非負整數(shù),同時保留非負整數(shù)到字符串的映射。這里我們先定義一個哈希函數(shù)以便復用。 

  1. def nnHash(tag: String) = tag.hashCode & 0x7FFFFF 
  2. var tagHashes = postIDTags .map(_._2) .distinct. map(tag => (nnHash 
  3. (tag) , tag)) 

現(xiàn)在把元組轉換為ALS計算所需的輸入: 

  1. import org. apache. spark. mllib. recommendation._  
  2. // Convert to Rating(Int ,Int,Double) objects  
  3. val alsInput = postIDTags.map(t => Rating(t. _1, nnHash(t._2), 1.  
  4. 0) )  
  5. // Train model with 40 features, 10 iterations of ALS  
  6. val model = ALS. trainImplicit(alsInput, 40,10) 

這一步生成特征矩陣,可以被用來預測問題與標簽之間的關聯(lián)。由于目前MLib還處于不完善的狀態(tài),沒有提供一個recommend的接口來獲取建議的標簽,我們可以簡單定義一個: 

  1. def  
  2. recommend (questionID: Int, howMany: Int = 5): Array[(String ,  
  3. Double)] = {  
  4. // Build list of one question and all items and predict value f  
  5. or all of them  
  6. val predictions = model. predict(tagHashes.map(t => (questionI  
  7. D,t._1)))  
  8. // Get top howMany recommendations ordered by prediction value  
  9. val topN = predictions. top ( howMany) (Ordering . by [Rating,Doub1  
  10. e](_.rating))  
  11. // Translate back to tags from IDs  
  12. topN . map(r => (tagHashes. lookup(r . product)(0),r .rating)) 

通過上述函數(shù),我們可以獲得任意一個問題比如ID為7122697的How to make substring-matching query work fast on a large table?的至少4個標簽:

  1. recommend ( 7122697)。foreach(println) 

推薦結果如下所示: 

  1. (sqL,0.17745152481166354)  
  2. (database,0.13526622226672633)  
  3. (oracle , 0.1079428707621154)  
  4. (ruby-on-rails, 0.06067207312463499)  
  5. (postgresql,0.050933613169706474) 

注意:

  • -每次運行得到的結果不盡相同,是因為ALS是從隨機解開始迭代的
  • -如果你希望獲得實時性更高的結果,可以在recommend前輸入tagHashes=tagHas hes. cache

真實的問題標簽是postgresql、query-optimi zation、substring 和text-search。不過,預測結果也有一定的合理性(postgresq 經(jīng)常和ruby-on-rails一起出現(xiàn))

當然,以上的示例還不夠優(yōu)雅和高效,但是,我希望所有來自R的分析師、鼓搗Python 的黑客和熟悉Hadoop的開發(fā)者,都能從中找到你們熟悉的部分,從而找到一條適合你們的路徑去探索Spark,并從中獲益。

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2014-07-03 09:38:19

2018-02-28 15:03:03

數(shù)據(jù)科學家數(shù)據(jù)分析職業(yè)

2015-08-28 09:22:07

數(shù)據(jù)科學

2016-10-21 19:59:43

數(shù)據(jù)科學家數(shù)據(jù)科學

2019-05-13 16:31:37

數(shù)據(jù)科學家專業(yè)人才職業(yè)

2013-04-11 10:03:55

2017-08-04 15:53:10

大數(shù)據(jù)真?zhèn)螖?shù)據(jù)科學家

2016-09-22 16:30:17

ITPythonSQL queries

2019-08-22 09:23:58

數(shù)據(jù)科學工程師數(shù)據(jù)處理

2013-05-10 09:28:14

大數(shù)據(jù)數(shù)據(jù)科學家SAS

2024-06-28 14:59:08

2024-10-29 11:05:26

2018-11-05 17:33:34

數(shù)據(jù)科學家數(shù)據(jù)分析數(shù)據(jù)

2013-11-13 10:20:19

數(shù)據(jù)科學家大數(shù)據(jù)Gartner

2012-12-26 10:51:20

數(shù)據(jù)科學家

2018-03-12 12:44:59

數(shù)據(jù)科學家人工智能數(shù)據(jù)科學

2012-12-06 15:36:55

CIO

2013-07-22 14:49:32

創(chuàng)業(yè)公司URL

2018-12-24 08:37:44

數(shù)據(jù)科學家數(shù)據(jù)模型

2023-05-23 09:34:16

科學家AI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情欧美激情在线五月 | 麻豆久久久9性大片 | 91国内在线观看 | 久久三区| www久久久 | 国产成人免费视频网站视频社区 | 中文字幕国产精品 | 欧美乱操 | 国产精品99久久久久久久久 | 亚洲伊人久久综合 | 国内久久精品 | 亚洲欧美视频 | 精品国产欧美日韩不卡在线观看 | 国产日韩一区二区三区 | 精品久久久久久国产 | 久久亚洲精品国产精品紫薇 | 亚洲国产高清高潮精品美女 | 精品国产一区二区三区性色av | 亚洲视频在线看 | 久久精品一区 | 色视频成人在线观看免 | 91精品在线播放 | 欧美日韩免费视频 | 在线观看黄色大片 | 久久黄网 | 久久97精品| 一道本在线| 资源首页二三区 | 日韩在线不卡 | 日本精品一区二区三区在线观看视频 | 国产精品成人av | 久久天天躁狠狠躁夜夜躁2014 | 91麻豆精品国产91久久久久久久久 | 91精品国产综合久久香蕉麻豆 | 欧美综合一区二区三区 | 欧美日韩国产在线 | 人人鲁人人莫人人爱精品 | 中文二区 | 亚州一区二区三区 | 亚洲第一在线 | 国产精品久久久久无码av |