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