1. 程式人生 > >Pandas基礎學習與Spark Python初探

Pandas基礎學習與Spark Python初探

入學 init sparkconf sch 時間 com inux mas 取數

摘要:pandas是一個強大的Python數據分析工具包,pandas的兩個主要數據結構Series(一維)和DataFrame(二維)處理了金融,統計,社會中的絕大多數典型用例科學,以及許多工程領域。在Spark中,python程序可以方便修改,省去java和scala等的打包環節,如果需要導出文件,可以將數據轉為pandas再保存到csv,excel等。

1.Pandas是什麽?

pandas是一個強大的Python數據分析工具包,是一個提供快速,靈活和表達性數據結構的python包,旨在使“關系”或“標記”數據變得簡單直觀。它旨在成為在Python中進行實用的真實世界數據分析的基本高級構建塊。此外,它的更廣泛的目標是成為最強大和最靈活的任何語言的開源數據分析/操作工具。

2.Pandas安裝

這裏使用pip包管理器安裝(python版本為2.7.13)。在windows中,cmd進入python的安裝路徑下的Scripts目錄,執行:

pip install pandas

即可安裝pandas,安裝完成後提示如下:
技術分享

說明已成功安裝pandas.這裏同時安裝了numpy等。

3.Pandas數據類型

pandas非常適合許多不同類型的數據:

  • 具有非均勻類型列的表格數據,如在SQL表或Excel電子表格中
  • 有序和無序(不一定是固定頻率)時間序列數據。
  • 帶有行和列標簽的任意矩陣數據(均勻類型或異質)
  • 任何其他形式的觀測/統計數據集。數據實際上不需要被標記就可以被放置到Pandas的數據結構中

4.Pandas基礎

這裏簡單學習Pandas的基礎,以命令模式為例,首先需要導入pandas包與numpy包,numpy這裏主要使用其nan數據以及生成隨機數:

import pandas as pd
import numpy as np

4.1 pandas之Series

通過傳遞值列表創建Series,讓pandas創建一個默認整數索引:

技術分享

4.2 pandas之DataFrame

通過傳遞numpy數組,使用datetime索引和標記的列來創建DataFrame:

技術分享

查看DataFrame的頭部和尾部數據:

技術分享

顯示索引,列和基礎numpy數據:

技術分享

顯示數據的快速統計摘要:

技術分享

按值排序:

技術分享

選擇單個列,產生Series:

技術分享

通過[]選擇,通過切片選擇行:

技術分享

4.2.1 DataFrame讀寫csv文件

保存DataFrame數據到csv文件:

技術分享

這裏保存到c盤下,可以查看文件內容:

技術分享

從csv文件讀取數據:

技術分享

4.2.2 DataFrame讀寫excel文件

保存數據到excel文件:

技術分享

這裏保存到c盤下,可以查看文件內容:

技術分享

註:此處需要安裝openpyxl,同pandas安裝相同,pip install openpyxl.
從excel文件讀取:
技術分享
註:因為Excel需要單獨的模塊支持,所以需要安裝xlrd,同pandas安裝相同,pip install xlrd.

5.Pandas在Spark Python

這裏測試讀取一個已存在的parquet文件,目錄為/data/parquet/20170901/,這裏讀取該目錄下名字為part-r-00000開始的文件。將文件內容中的兩列數據讀取並保存到文件。代碼如下:

#coding=utf-8

import sys
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext

class ReadSpark(object):
    def __init__(self, paramdate):
        self.parquetroot = /data/parquet/%s‘ # 這裏是HDFS路徑
        self.thedate = paramdate
        self.conf = SparkConf()
        self.conf.set("spark.shuffle.memoryFraction", "0.5")
        self.sc = SparkContext(appName=ReadSparkData, conf=self.conf)
        self.sqlContext = SQLContext(self.sc)

    def getTypeData(self):
        basepath = self.parquetroot % self.thedate
        parqFile = self.sqlContext.read.option("mergeSchema", "true").option(basePath, basepath).parquet(
            %s/part-r-00000* % (basepath))
        resdata = parqFile.select(appId, os)
        respd = resdata.toPandas()
        respd.to_csv(/data/20170901.csv) #這裏是Linux系統目錄
        print("--------------------data count:" + str(resdata.count()))

if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding(utf-8)
    rs = ReadSpark(20170901)
    rs.getTypeData()

將代碼命名為TestSparkPython.py,在集群提交,這裏使用的命令為(參數信息與集群環境有關):

 spark-submit --master yarn --driver-memory  6g  --deploy-mode client --executor-memory 9g  --executor-cores 3  --num-executors 50   /data/test/TestSparkPython.py 

執行完成後,查看文件前五行內容,head -5 /data/20170901.csv:

技術分享

總結:python編寫spark程序還是非常方便的,pandas包在數據處理中的優勢也很明顯。在python越來越火的當下,值得深入學好python,就像python之禪寫的那樣……

Pandas基礎學習與Spark Python初探