Apache Spark是一個(gè)用于大規(guī)模數(shù)據(jù)分析處理的引擎。它支持JAVA、Scala、Python和R語(yǔ)言。
在數(shù)據(jù)分析人工智能領(lǐng)域 Python的使用已經(jīng)遠(yuǎn)超其它語(yǔ)言。
其中Spark還支持一組豐富的高級(jí)工具,包括用于SQL和結(jié)構(gòu)化數(shù)據(jù)處理的Spark SQL、用于機(jī)器學(xué)習(xí)的MLlib、用于圖形處理的GraphX以及用于增量計(jì)算和流處理的Spark Streaming。
本文使用PySpark的SQL module 來實(shí)現(xiàn)對(duì)CSV文件數(shù)據(jù)分析及處理。
雖然Spark擅長(zhǎng)的是大數(shù)據(jù)分析,但是通過這個(gè)例子我們可以看一下Spark數(shù)據(jù)分析是怎么做的,殺雞得用宰牛刀了?
要解決的問題:
新冠疫情到目前為止世界各國(guó)康復(fù)人數(shù)的Top統(tǒng)計(jì),如下圖:
結(jié)果展示
輸入文件:
我們現(xiàn)在有一份聯(lián)合國(guó)發(fā)布的關(guān)于新冠康復(fù)人數(shù)的統(tǒng)計(jì)信息,這里面包含國(guó)家,省份,還有每日更新的總康復(fù)人數(shù)
最后一列"2020年6月23號(hào)"就是我們需要的信息。
輸入文件
那么我們想統(tǒng)計(jì)什么呢?
我們這次要統(tǒng)計(jì)的是,基于國(guó)家的康復(fù)的人數(shù)從大到小的排列。并且總數(shù)大于1萬(wàn)。
- 建立Context 讀入數(shù)據(jù):
- 我們使用下面的函數(shù)建立Spark context。
- Spark Local模式單機(jī)模式,并不是集群模式
建立 spark context
- 調(diào)用函數(shù)打開文件,
- 這個(gè)文件是有頭的,就是第一行。
打開文件
- 分析數(shù)據(jù):
- 我們看這個(gè)表里面有省,國(guó)家,以及人數(shù)的信息,
- 我們需要的一個(gè)是國(guó)家(包括所有省),另外一個(gè)是人數(shù)
按國(guó)家名統(tǒng)計(jì)人數(shù)
- 輸出結(jié)果:
國(guó)家級(jí)人數(shù)總和
- 然后再把它做一個(gè)排序。
按人數(shù)從大到小排序
- 結(jié)果如下
排序后結(jié)果
- 我們看到排序之后,列名不是我們想要的,再重新整理一下
總數(shù)大于10000并重命名列
- 查看下目前數(shù)據(jù)的格式:我們可以看到國(guó)家和康復(fù)數(shù)字的排名了。
最后數(shù)據(jù)輸出結(jié)果
- 下面我們還需要把它寫到文件里,后續(xù)畫圖用。然后寫的文件的模式是覆蓋,并且文件帶頭。
寫入CSV文件
- 這里面有個(gè)分區(qū)合并的動(dòng)作(coalesce),為什么這里頭加一個(gè)這個(gè)重分區(qū)呢?因?yàn)镾park是分布式計(jì)算,如果不加這個(gè)重分區(qū)的話,它會(huì)按照默認(rèn)的分區(qū)數(shù)來生成多個(gè)Excel文件。
- 最終結(jié)果:
- 查看一下生成文件Excel表:第1列是國(guó)家,第2列是人數(shù)的統(tǒng)計(jì)之和,然后數(shù)字從大到小,所有康復(fù)數(shù)量大于1萬(wàn)的國(guó)家統(tǒng)計(jì)出來目前是50個(gè)。
最終結(jié)果數(shù)據(jù)
- 最后以圖形的形式展示就是文章開頭的圖表了!






