欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

歡迎來(lái)到云服務(wù)器

大數(shù)據(jù)技術(shù)

為什么Spark將成為數(shù)據(jù)科學(xué)家的統(tǒng)一平臺(tái)

中國(guó)IDC圈4月20日?qǐng)?bào)道,數(shù)據(jù)科學(xué)是一個(gè)遼闊的規(guī)模。我自認(rèn)是一個(gè)數(shù)據(jù)科學(xué)家,但和別的一批數(shù)據(jù)科學(xué)家又有許多的差異。數(shù)據(jù)科學(xué)家凡是分為統(tǒng)計(jì)科學(xué)家和數(shù)據(jù)工程師兩個(gè)陣營(yíng),而我正處于第二陣營(yíng)。

統(tǒng)計(jì)科學(xué)家利用交互式的統(tǒng)計(jì)東西(好比R)來(lái)答復(fù)數(shù)據(jù)中的問(wèn)題,得到全景的認(rèn)識(shí)。與之對(duì)比,數(shù)據(jù)工程師則更像一名措施員,他們?cè)?a href='http://www.qzkangyuan.com/cnidc/tech/xuni/20160910/2775.html' target='_blank'>處事器上編寫(xiě)代碼,建設(shè)和應(yīng)用呆板進(jìn)修模子,熟悉C++和Java等系統(tǒng)級(jí)語(yǔ)言,常常需要和企業(yè)級(jí)數(shù)據(jù)中心的某些組件打交道,好比Hadoop。

而有的數(shù)據(jù)科學(xué)家專(zhuān)注于更細(xì)的規(guī)模,就像能干R但從未傳聞過(guò)Python可能scikit-learn(反之亦然),即便兩者都提供了富厚的統(tǒng)計(jì)庫(kù)。

不完美的統(tǒng)計(jì)東西

假如可以提供一種統(tǒng)一的東西,運(yùn)行在統(tǒng)一的架構(gòu),用統(tǒng)一的語(yǔ)言編程,并可以同時(shí)滿意統(tǒng)計(jì)科學(xué)家和數(shù)據(jù)工程師的需求,,那該多好啊。我一開(kāi)始就能干Java,莫非為了研究數(shù)據(jù),我就必需去學(xué)一種像Python或R的語(yǔ)言?我一直利用傳統(tǒng)的數(shù)據(jù)闡明東西,莫非為了應(yīng)對(duì)大局限計(jì)較,就必需去懂MapReduce?正是統(tǒng)計(jì)東西的不完美培育了這種排場(chǎng):

R提供了一個(gè)富厚的統(tǒng)計(jì)闡明和呆板進(jìn)修的表明器。但R難以在漫衍式條件下執(zhí)行數(shù)據(jù)的闡明和清洗,以便開(kāi)展其所擅長(zhǎng)的數(shù)據(jù)闡明,也不以一種主流的開(kāi)拓語(yǔ)言為人所知。

Python是一種通用的編程語(yǔ)言,也不乏精彩的第三方數(shù)據(jù)闡明庫(kù)(像Pandas和scikit-learn),但Python也有和R一樣的缺陷:只能范圍在處理懲罰單性能負(fù)載的數(shù)據(jù)量。

在經(jīng)典的MapReduce計(jì)較框架上開(kāi)拓漫衍式的呆板進(jìn)修算法是可行的(參考Mahout),但措施員需要從零開(kāi)始,更別說(shuō)移植巨大計(jì)較的難度。

為低落巨大計(jì)較移植到MapReduce的難度,Crunch提供一個(gè)簡(jiǎn)樸的、傻瓜式的Java API,但MapReduce天生抉擇了它在迭代計(jì)較方面是低效的,盡量大大都呆板進(jìn)修算法都需要迭代計(jì)較。

其他的數(shù)據(jù)科學(xué)東西一樣無(wú)法精細(xì)絕倫。基于Java和Hadoop的配景,我開(kāi)始理想一個(gè)抱負(fù)的數(shù)據(jù)科學(xué)利器:一個(gè)像R和Python的能實(shí)現(xiàn)RPEL(讀取-估值-打印-輪回)的自帶統(tǒng)計(jì)庫(kù)函數(shù)的呼吁行表明器,又具備天然的漫衍式可擴(kuò)展的屬性;擁有像Crunch一樣的漫衍式薈萃,并且能通過(guò)呼吁行表明器挪用。

Spark的優(yōu)勢(shì)

這就是Spark讓我歡快的原因。大部門(mén)人接頭到Spark時(shí),老是留意到將數(shù)據(jù)駐留內(nèi)存以提高計(jì)較效率的方面(相對(duì)MapReduce),但對(duì)我來(lái)說(shuō)這基礎(chǔ)不是要害。Spark擁有很多的特征,使之真正成為一個(gè)融合統(tǒng)計(jì)科學(xué)和數(shù)據(jù)工程的交錯(cuò)點(diǎn):

Spark附帶了一個(gè)呆板進(jìn)修庫(kù)MLib,固然只是在初始階段。

Spark是用Scala語(yǔ)言編寫(xiě)的,運(yùn)行在Java虛擬機(jī)上,同時(shí)也提供像R和Python的呼吁行表明器。

對(duì)Java措施員,Scala的進(jìn)修曲線是較量陡峭的,但所幸Scala可以兼容一切的Java庫(kù)。

Spark的RDD(彈性漫衍式數(shù)據(jù)集),是Crunch開(kāi)拓者熟知的一種數(shù)據(jù)布局。

Spark仿照了Scala的薈萃計(jì)較API,對(duì)Java和Scala開(kāi)拓者來(lái)說(shuō)耳熟能詳,而Python開(kāi)拓者也不難上手,而Scala對(duì)統(tǒng)計(jì)計(jì)較的支持也不錯(cuò)。

Spark和其底層的Scala語(yǔ)言,并不可是為呆板進(jìn)修而降生的,除此之外,像數(shù)據(jù)會(huì)見(jiàn)、日志ETL和整合都可以通過(guò)API輕松搞定。就像Python,你可以把整個(gè)數(shù)據(jù)計(jì)較流程搬到Spark平臺(tái)上來(lái),而不只僅是模子擬合和闡明。

在呼吁行表明器中執(zhí)行的代碼,和編譯后運(yùn)行的結(jié)果溝通。并且,呼吁行的輸入可以獲得及時(shí)反饋,你將看到數(shù)據(jù)透明地在集群間通報(bào)與計(jì)較。

Spark和MLib尚有待完善:整個(gè)項(xiàng)目有不少bug,效率也尚有晉升的空間,和YARN的整合也存在問(wèn)題。Spark還沒(méi)步伐提供像R那樣富厚的數(shù)據(jù)闡明函數(shù)。但Spark已然是世界上最好的數(shù)據(jù)平臺(tái),足以讓來(lái)自任何配景的數(shù)據(jù)科學(xué)家側(cè)目。

實(shí)戰(zhàn):Stack Overflow問(wèn)題的自動(dòng)標(biāo)注

Stack Overflow是一個(gè)著名的軟件技能問(wèn)答平臺(tái),在上面提的每個(gè)問(wèn)題有大概被打上若干個(gè)隨筆本的標(biāo)簽,好比java可能sql,我們的方針在于成立一套系統(tǒng),利用ALS推薦算法,為新問(wèn)題的標(biāo)簽提供預(yù)測(cè)和發(fā)起。從推薦系統(tǒng)的角度,你可以把問(wèn)題想象成user,把標(biāo)簽想象成item。

首先,從Stack Overflow下載官方提供的停止20140120的問(wèn)答數(shù)據(jù)stackoverflow.com-Posts.7z。

這是一個(gè)可以或許直接用于漫衍式計(jì)較的bzip名目文件,但在我們的場(chǎng)景下,必需先解壓并拷貝到HDFS:

bzcat stackoverflow.com-Posts.7z | hdfs dfs -put – /user/srowen/Posts.xml

解壓后的文件約莫是24.4GB,包括210萬(wàn)個(gè)問(wèn)題,1800萬(wàn)個(gè)答復(fù),總共標(biāo)注了930萬(wàn)個(gè)標(biāo)簽,這些標(biāo)簽排重之后或許是34000個(gè)。

確認(rèn)呆板安裝了Spark之后,輸入spark-shell即可打開(kāi)Scala的REPL情況。首先,我們讀取一個(gè)存儲(chǔ)在HDFS的Posts.xml文件:

val postsXML = sc.textFile(“hdfs:///user/srowen/Posts.xml”)

這時(shí)呼吁行東西會(huì)返回:

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

顯示文本文件已轉(zhuǎn)化為一個(gè)String型的RDD,你可以通過(guò)挪用RDD的函數(shù),實(shí)現(xiàn)任意的查詢(xún)運(yùn)算。好比統(tǒng)計(jì)文件的行數(shù):

postsXML.count

這條指令生成大量的輸出,顯示Spark正在操作漫衍式的情況計(jì)數(shù),最終打印出18066983。

下一步,將XML文件的每一行都存入形如(questionID, tag)的元組。得益于Scala的函數(shù)式編程的氣勢(shì)氣魄,RDD和Scala薈萃一樣可以利用map等要領(lǐng):

val postIDTags = postsXML.flatMap { line => // Matches Id=”…” … Tags=”…” in line

val idTagRegex = “Id=”(\d+)”.+Tags=”([^”]+)””.r // // Finds tags like value from above

val tagRegex = “<([^&]+)>”.r // Yields 0 or 1 matches:

idTagRegex.findFirstMatchIn(line) match { // No match — not a line

case None => None // Match, and can extract ID and tags from m

case Some(m) => {

val postID = m.group(1).toInt

val tagsString = m.group(2) // Pick out just TAG matching group

val tags = tagRegex.findAllMatchIn(tagsString).map(_.group(1)).toList // Keep only question with at least 4 tags, and map to (post,tag) tuples

if (tags.size >= 4) tags.map((postID,_)) else None

}

} // Because of flatMap, individual lists will concatenate

// into one collection of tuples}

你會(huì)發(fā)明這條指令的執(zhí)行是當(dāng)即返回的,而不像count一樣需要期待,因?yàn)榈浇癯癁橹梗琒park并未啟動(dòng)任何主機(jī)間的數(shù)據(jù)調(diào)動(dòng)。

騰訊云代理

Copyright © 2003-2021 MFISP.COM. 國(guó)外vps服務(wù)器租用 夢(mèng)飛云服務(wù)器租用 版權(quán)所有 ? 粵ICP備11019662號(hào)

主站蜘蛛池模板: 石棉县| 怀安县| 淅川县| 南宁市| 富平县| 巫山县| 江西省| 利辛县| 天镇县| 景洪市| 雷波县| 邵阳市| 黑山县| 梓潼县| 黄浦区| 齐河县| 富宁县| 汶上县| 松滋市| 永吉县| 永兴县| 林芝县| 澎湖县| 文登市| 南澳县| 田东县| 石屏县| 元朗区| 图木舒克市| 黄平县| 通海县| 甘孜县| 玉林市| 余干县| 南靖县| 芦溪县| 新闻| 河东区| 沙雅县| 海林市| 收藏|