如何使用5個(gè)Python庫(kù)管理大數(shù)據(jù)憔披?
如今爸吮,Python真是無(wú)處不在芬膝。盡管許多看門人爭(zhēng)辯說(shuō)形娇,如果他們不使用比Python更難的語(yǔ)言編寫代碼,那么一個(gè)人是否真是軟件開發(fā)人員癣缅,但它仍然無(wú)處不在哄酝。Python被用于自動(dòng)化,管理網(wǎng)站炫七,分析數(shù)據(jù)和處理大數(shù)據(jù)。隨著數(shù)據(jù)的增長(zhǎng)万哪,我們對(duì)其進(jìn)行管理的方式越來(lái)越需要調(diào)整抡秆。我們不再局限于僅使用關(guān)系型數(shù)據(jù)庫(kù)吟策。這也意味著現(xiàn)在有更多與這些新系統(tǒng)進(jìn)行交互的工具,例如Kafka着撩,Hadoop(具體來(lái)說(shuō)是HBase)匾委,Spark,BigQuery和Redshift(僅舉幾例)赂乐。這些系統(tǒng)中的每一個(gè)都利用如分布式、柱狀結(jié)構(gòu)和流數(shù)據(jù)之類的概念來(lái)更快地向終端用戶提供信息挖滤。對(duì)于更快浅役、更新的信息需求將促使數(shù)據(jù)工程師和軟件工程師利用這些工具。這就是為什么我們想要提供一些Python庫(kù)的快速介紹來(lái)幫助你觉既。
BigQuery
谷歌BigQuery是一個(gè)非常受歡迎的企業(yè)倉(cāng)庫(kù),由谷歌云平臺(tái)(GCP)和Bigtable組合而成奋救。這個(gè)云服務(wù)可以很好地處理各種大小的數(shù)據(jù)反惕,并在幾秒鐘內(nèi)執(zhí)行復(fù)雜的查詢。
BigQuery是一個(gè)RESTful網(wǎng)絡(luò)服務(wù)背亥,它使開發(fā)人員能夠結(jié)合谷歌云平臺(tái)對(duì)大量數(shù)據(jù)集進(jìn)行交互分析悬赏。可以看看下方另一個(gè)例子闽颇。
連接到BigQuery兵多,然后開始獲取有關(guān)將與之交互的表和數(shù)據(jù)集的信息尖啡。在這種情況下,Medicare數(shù)據(jù)集是任何人都可以訪問(wèn)的開源數(shù)據(jù)集盆顾。
關(guān)于BigQuery的另一點(diǎn)是畏梆,它是在Bigtable上運(yùn)行的。重要的是要了解該倉(cāng)庫(kù)不是事務(wù)型數(shù)據(jù)庫(kù)奠涌。因此,不能將其視為在線交易處理(OLTP)數(shù)據(jù)庫(kù)揖铜。它是專為大數(shù)據(jù)而設(shè)計(jì)的达皿。所以它的工作與千萬(wàn)字節(jié)(PB)級(jí)的數(shù)據(jù)集的處理保持一致。
Redshift?and?Sometimes?S3
接下來(lái)是亞馬遜(Amazon)流行的Redshift和S3龄寞。AmazonS3本質(zhì)上是一項(xiàng)存儲(chǔ)服務(wù),用于從互聯(lián)網(wǎng)上的任何地方存儲(chǔ)和檢索大量數(shù)據(jù)物邑。使用這項(xiàng)服務(wù)滔金,你只需為實(shí)際使用的存儲(chǔ)空間付費(fèi)。另一方面餐茵,Redshift是一個(gè)管理完善的數(shù)據(jù)倉(cāng)庫(kù)忿族,可以有效地處理千萬(wàn)字節(jié)(PB)級(jí)的數(shù)據(jù)。該服務(wù)使用SQL和BI工具可以更快地進(jìn)行查詢道批。
Amazon?Redshift和S3作為一個(gè)強(qiáng)大的組合來(lái)處理數(shù)據(jù):使用S3可以將大量數(shù)據(jù)上傳Redshift倉(cāng)庫(kù)。用Python編程時(shí)椭岩,這個(gè)功能強(qiáng)大的工具對(duì)開發(fā)人員來(lái)說(shuō)非常方便。
這是一個(gè)選擇使用psycopg2的基本連接的腳本判哥。我借用了Jaychoo代碼。但是惩琉,這再次提供了有關(guān)如何連接并從Redshift獲取數(shù)據(jù)的快速指南夺荒。
PySpark
讓我們離開數(shù)據(jù)存儲(chǔ)系統(tǒng)的世界,來(lái)研究有助于我們快速處理數(shù)據(jù)的工具技扼。Apache?Spark是一個(gè)非常流行的開源框架,可以執(zhí)行大規(guī)模的分布式數(shù)據(jù)處理窍箍,它也可以用于機(jī)器學(xué)習(xí)丽旅。該集群計(jì)算框架主要側(cè)重于簡(jiǎn)化分析。它與彈性分布式數(shù)據(jù)集(RDD)配合使用榄笙,并允許用戶處理Spark集群的管理資源。
它通常與其他Apache產(chǎn)品(例如HBase)結(jié)合使用帆卓。Spark將快速處理數(shù)據(jù)米丘,然后將其存儲(chǔ)到其他數(shù)據(jù)存儲(chǔ)系統(tǒng)上設(shè)置的表中。
有時(shí)候拄查,安裝PySpark可能是個(gè)挑戰(zhàn),因?yàn)樗枰蕾図?xiàng)腺毫。你可以看到它運(yùn)行在JVM之上挣柬,因此需要Java的底層基礎(chǔ)結(jié)構(gòu)才能運(yùn)行睛挚。然而,在Docker盛行的時(shí)代扎狱,使用PySpark進(jìn)行實(shí)驗(yàn)更加方便勃教。
阿里巴巴使用PySpark來(lái)個(gè)性化網(wǎng)頁(yè)和投放目標(biāo)廣告——正如許多其他大型數(shù)據(jù)驅(qū)動(dòng)組織一樣匠抗。
Kafka?PythonKafka
是一個(gè)分布式發(fā)布-訂閱消息傳遞系統(tǒng),它允許用戶在復(fù)制和分區(qū)主題中維護(hù)消息源绳军。
這些主題基本上是從客戶端接收數(shù)據(jù)并將其存儲(chǔ)在分區(qū)中的日志矢腻。Kafka?Python被設(shè)計(jì)為與Python接口集成的官方Java客戶端。它最好與新的代理商一起使用多柑,并向后兼容所有舊版本。使用KafkaPython編程同時(shí)需要引用使用者(KafkaConsumer)和引用生產(chǎn)者(KafkaProducer)聂沙。
在Kafka?Python中初嘹,這兩個(gè)方面并存。KafkaConsumer基本上是一個(gè)高級(jí)消息使用者削樊,將用作官方Java客戶端。
它要求代理商支持群組API甸箱。KafkaProducer是一個(gè)異步消息生成器迅脐,它的操作方式也非常類似于Java客戶端。生產(chǎn)者可以跨線程使用而沒(méi)有問(wèn)題谴蔑,而消費(fèi)者則需要多線程處理。
Pydoop
讓我們解決這個(gè)問(wèn)題窃躲。Hadoop本身并不是一個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)钦睡。Hadoop實(shí)際上具幾個(gè)組件,包括MapReduce和Hadoop分布式文件系統(tǒng)(HDFS)。因此秧秉,Pydoop在此列表中衰抑,但是你需要將Hadoop與其他層(例如Hive)配對(duì),以便更輕松地處理數(shù)據(jù)呛踊。
Pydoop是Hadoop-Python界面,允許與HDFSAPI交互拇舀,并使用純Python代碼編寫MapReduce工作蜻底。
該庫(kù)允許開發(fā)人員無(wú)需了解Java即可訪問(wèn)重要的MapReduce功能,例如RecordReader和Partitioner薄辅。
對(duì)于大多數(shù)數(shù)據(jù)工程師而言,Pydoop本身可能有點(diǎn)太基本了脱惰。你們中的大多數(shù)人很可能會(huì)在Airbow中編寫在這些系統(tǒng)之上運(yùn)行的ETLs窿春。但是,至少對(duì)你的工作有一個(gè)大致的了解還是很不錯(cuò)的旧乞。
從哪里開始呢?
未來(lái)幾年嫡纠,管理大數(shù)據(jù)只會(huì)變得越來(lái)越困難延赌。由于日益劇增的網(wǎng)絡(luò)能力——物聯(lián)網(wǎng)(IoT),改進(jìn)的計(jì)算等等——我們得到的數(shù)據(jù)將會(huì)如洪流般地繼續(xù)增長(zhǎng)挫以。
因此,如果我們想要跟上步伐蠢棱,甩栈,有必要了解一些可用于與這些系統(tǒng)進(jìn)行交互的數(shù)據(jù)系統(tǒng)和庫(kù)。