偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python+大數(shù)據(jù)計(jì)算平臺(tái),PyODPS架構(gòu)手把手教你搭建

大數(shù)據(jù)
大數(shù)據(jù)基本都是建立在Hadoop系統(tǒng)的生態(tài)上的,其實(shí)一個(gè)Java的環(huán)境。很多人喜歡用Python和R來進(jìn)行數(shù)據(jù)分析,但是這往往對(duì)應(yīng)一些小數(shù)據(jù)的問題,或者本地?cái)?shù)據(jù)處理的問題。如何將二者進(jìn)行結(jié)合使其具有更大的價(jià)值?Hadoop現(xiàn)有的生態(tài)系統(tǒng)和現(xiàn)有的Python環(huán)境如上圖所示。

數(shù)據(jù)分析和機(jī)器學(xué)習(xí)

大數(shù)據(jù)基本都是建立在Hadoop系統(tǒng)的生態(tài)上的,其實(shí)一個(gè)Java的環(huán)境。很多人喜歡用Python和R來進(jìn)行數(shù)據(jù)分析,但是這往往對(duì)應(yīng)一些小數(shù)據(jù)的問題,或者本地?cái)?shù)據(jù)處理的問題。如何將二者進(jìn)行結(jié)合使其具有更大的價(jià)值?Hadoop現(xiàn)有的生態(tài)系統(tǒng)和現(xiàn)有的Python環(huán)境如上圖所示。

MaxCompute

MaxCompute是面向離線計(jì)算的大數(shù)據(jù)平臺(tái),提供TB/PB級(jí)的數(shù)據(jù)處理,多租戶、開箱即用、隔離機(jī)制確保安全。MaxCompute上主要分析的工具就是SQL,SQL非常簡(jiǎn)單、容易上手,屬于描述型。Tunnel提供數(shù)據(jù)上傳下載通道,不需要經(jīng)過SQL引擎的調(diào)度。

Pandas

Pandas是基于numpy的數(shù)據(jù)分析的工具,里面最重要的結(jié)構(gòu)是DataFrame,提供一系列繪圖的API,背后是matplotlib的操作,非常容易和Python第三方庫(kù)交互。

PyODPS架構(gòu)

PyODPS即利用Python進(jìn)行大數(shù)據(jù)分析,其架構(gòu)如上圖所示。底層是基礎(chǔ)API,可以利用其操作MaxCompute上的表、函數(shù)或者資源。再上面是DataFrame框架,DataFrame包括兩部分,一部分是前端,定義了一套表達(dá)式的操作,用戶寫的代碼會(huì)轉(zhuǎn)化成表達(dá)式樹,這與普通的語言是一樣的。用戶可以自定義函數(shù),也可以進(jìn)行可視化,與第三方庫(kù)進(jìn)行交互。后端最下面是Optimizer,其作用是對(duì)表達(dá)式樹進(jìn)行優(yōu)化。ODPS和pandas都是通過compiler和analyzer提交到Engine來執(zhí)行。

背景

為什么要做DataFrame框架?

對(duì)于任何一個(gè)大數(shù)據(jù)分析工具,都會(huì)面臨三個(gè)維度上的問題:表達(dá)力,API、語法、編程語言是否簡(jiǎn)單、符合直覺?數(shù)據(jù),存儲(chǔ)、元數(shù)據(jù)是否能壓縮、有效?引擎,計(jì)算的性能是否足夠?所以就會(huì)面臨pandas和SQL兩個(gè)選擇。

如上圖所示,pandas的表達(dá)力非常好,但是其數(shù)據(jù)只能放在內(nèi)存中,引擎是單機(jī)的,受限于本機(jī)的性能。SQL的表達(dá)力有限,但是可以用于大量的數(shù)據(jù),數(shù)據(jù)量小的時(shí)候沒有引擎的優(yōu)勢(shì),數(shù)據(jù)量大的時(shí)候引擎會(huì)變得很有優(yōu)勢(shì)。ODPS的目標(biāo)是綜合這兩者的優(yōu)點(diǎn)。

PyODPS DataFrame

PyODPS DataFrame是使用Python語言寫的,可以使用Python的變量、條件判斷、循環(huán)。可以使用pandas類似的語法,定義了自己的一套前端,有了更好的表達(dá)力。后端可以根據(jù)數(shù)據(jù)來源來決定具體執(zhí)行的引擎,是visitor的設(shè)計(jì)模式,可擴(kuò)展。整個(gè)執(zhí)行是延遲執(zhí)行,除非用戶調(diào)用立即執(zhí)行的方法,否則是不會(huì)直接執(zhí)行的。

從上圖中可以看出,語法非常類似于pandas。

表達(dá)式和抽象語法樹

 

從上圖可以看出,用戶從一個(gè)原始的Collection來進(jìn)行GroupBy操作,再進(jìn)行列選擇的操作,最下面是Source的Collection。取了兩個(gè)字段species,這兩個(gè)字段是做By操作的,pental_length是進(jìn)行聚合的操作取聚合值。Species字段是直接取出來,shortest字段是進(jìn)行加一的操作。

Optimizer(操作合并)

后端首先會(huì)使用Optimizer對(duì)表達(dá)式樹進(jìn)行優(yōu)化,先做GroupBy,然后在上面做列選擇,通過操作合并可以去除petal_length做聚合操作,再加一,最終形成了GroupBy的Collection。

Optimizer(列剪枝)

用戶join了兩個(gè)data frame,再取來自data frame 的兩個(gè)列的時(shí)候,如果提交到一個(gè)大數(shù)據(jù)的環(huán)境,這樣一個(gè)過程是非常低下的,因?yàn)椴皇敲總€(gè)列都用到了。所以要對(duì)joined下的列進(jìn)行剪枝操作。比如,data frame1我們只用到了其中的一個(gè)字段,我們只需要將字段截取出來做一個(gè)projection來形成新的Collection,data frame2也類似。這樣,對(duì)這兩部分進(jìn)行校驗(yàn)操作的時(shí)候就能極大的減少數(shù)據(jù)的輸出量。

Optimizer(謂詞下推)

如果對(duì)兩個(gè)data frame進(jìn)行joined然后再分別進(jìn)行過濾的話,這個(gè)過濾操作是應(yīng)該下推到下面來執(zhí)行的,這樣就能減少joined 的輸入的量。

可視化

提供了visualize()來方便用戶進(jìn)行可視化。在右邊的例子中可以看到,ODSP SQL后端會(huì)compile成一條SQL執(zhí)行。

后端

從上圖中可以看出,計(jì)算后端是非常靈活的。用戶甚至可以joined一個(gè)pandas的data frame和maxcompute上一個(gè)表的數(shù)據(jù)。

Analyzer

Analyzer的作用是針對(duì)具體的后端,將一些操作進(jìn)行轉(zhuǎn)化。比如:

  • 有些操作比如value_counts,pandas本身支持,因此對(duì)于pandas后端,無需處理;對(duì)于ODPS SQL后端,沒有一個(gè)直接的操作來執(zhí)行,所以在analyzer執(zhí)行的時(shí)候,會(huì)被改寫成groupby + sort的操作;
  • 還有一些算子,在compile到ODPS SQL時(shí),沒有內(nèi)建函數(shù)能完成,會(huì)被改寫成自定義函數(shù)。

ODPS SQL后端

 

ODPS SQL后端怎么進(jìn)行SQL編譯再執(zhí)行的操作?編譯器可以從上到下遍歷表達(dá)式樹,找到Join或者Union。對(duì)于子過程,進(jìn)行遞歸compile。再到Engine來具體執(zhí)行時(shí),會(huì)使用Analyzer對(duì)表達(dá)式樹進(jìn)行改寫,compile自上而下的子過程,自底向上compile成SQL子句,最終得到完整的SQL語句,提交SQL并返回任務(wù)。

pandas后端

首先訪問這個(gè)表達(dá)式樹,然后對(duì)每個(gè)表達(dá)式樹節(jié)點(diǎn)對(duì)應(yīng)到pandas操作,整個(gè)表達(dá)式樹遍歷完之后就會(huì)形成DAG。Engine執(zhí)行按DAG拓?fù)漤樞驁?zhí)行,不斷地把它應(yīng)用到pandas操作,最終得到一個(gè)結(jié)果。對(duì)于大數(shù)據(jù)環(huán)境來說,pandas后端的作用是做本地DEBUG;當(dāng)數(shù)據(jù)量很小時(shí),我們可以使用pandas進(jìn)行計(jì)算。

難點(diǎn)+坑

  • 后端編譯出錯(cuò)容易丟失上下文,多次optimize和analyze,導(dǎo)致難以查出是之前哪處visit node導(dǎo)致。解決:保證每個(gè)模塊獨(dú)⽴立性、測(cè)試完備;
  • bytecode兼容問題,maxcompute只支持Python2.7的自定義函數(shù)的執(zhí)行;
  • SQL的執(zhí)行順序。

ML機(jī)器學(xué)習(xí)

機(jī)器學(xué)習(xí)是輸入輸出一個(gè)data frame。比如,有一個(gè)iris的data frame,先用name字段來做一個(gè)分類字段,調(diào)用split方法將其分成60%的訓(xùn)練數(shù)據(jù)和40%的測(cè)試數(shù)據(jù)。然后初始化一個(gè)RandomForests,其里面有一棵決策樹,調(diào)用train方法訓(xùn)練訓(xùn)練數(shù)據(jù),調(diào)用predict方法形成一個(gè)預(yù)測(cè)數(shù)據(jù),調(diào)用segments[0]就可以看到可視化結(jié)果。

未來計(jì)劃

分布式numpy,DataFrame基于分布式numpy的后端;

內(nèi)存計(jì)算,提升交互式體驗(yàn);

Tensorflow。

責(zé)任編輯:未麗燕 來源: 網(wǎng)絡(luò)大數(shù)據(jù)
相關(guān)推薦

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2011-03-25 12:45:49

Oracle SOA

2021-12-17 18:21:54

大數(shù)據(jù)流水線設(shè)計(jì)

2010-07-06 09:43:57

搭建私有云

2010-07-06 09:38:51

搭建私有云

2022-01-04 08:52:14

博客網(wǎng)站Linux 系統(tǒng)開源

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)

2021-09-30 18:27:38

數(shù)據(jù)倉(cāng)庫(kù)ETL

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2025-02-26 07:40:25

運(yùn)營(yíng)分析體系運(yùn)營(yíng)策略

2010-01-20 10:44:01

linux DHCP服務(wù)器

2017-05-18 12:45:35

數(shù)據(jù)分析數(shù)據(jù)理解數(shù)據(jù)

2020-11-27 07:38:43

MongoDB

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2011-04-21 10:32:44

MySQL雙機(jī)同步

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)