在使用python做大資料和機器學習處理過程中,首先需要讀取hdfs資料,對於常用格式資料一般比較容易讀取,parquet略微特殊。從hdfs上使用python獲取parquet格式資料的方法(當然也可以先把檔案拉到本地再讀取也可以):
1、安裝anaconda環境。
2、安裝hdfs3。
conda install hdfs33、安裝fastparquet。
conda install fastparquet
5、讀取檔案
##namenode mode:
from hdfs3 import hdfilesystem
from fastparquet import parquetfile
hdfs = hdfilesystem(host=ip, port=8020)
sc = hdfs.open
pf = parquetfile(filename, open_with=sc)
df = pf.to_pandas()
##返回pandas的dataframe型別
##ha mode:
from hdfs3 import hdfilesystem
from fastparquet import parquetfile
host = "nameservice1"
conf =
hdfs = hdfilesystem(host = host, pars = conf)
......
python訪問hdfs ha的三種方法
python訪問hdfs常用的包有三個,如下:
1、hdfs3
from hdfs3 import hdfilesystem
hdfs = hdfilesystem(host=namenode, port=8020)
hdfs.ls('/tmp')
ha訪問:
host = "nameservice1"
conf =
fs = hdfilesystem(host=host, pars=conf)
##或者下面這種配置
host = "ns1"
conf =
hdfs = hdfilesystem(host = host, pars = conf)
2、hdfs
這種方法在使用的時候配置比較簡單,官網資料也比較豐富,但是需要注意的是該api可以模擬使用者訪問,許可權較大。ip直接訪問:
ha訪問:
安裝命令:pip install pyhdfs
import pyhdfs client = pyhdfs.hdfsclient(hosts="namenode:50070",user_name="hdfs")ha訪問
import pyhdfs client = pyhdfs.hdfsclient(hosts=["namenode1:50070","namenode2:50070"],user_name="hdfs")補充知識:python spark中parquet檔案寫到hdfs,同時避免太多的小檔案(block小檔案合併)
在pyspark中,使用資料框的檔案寫出函式write.parquet經常會生成太多的小檔案,例如申請了100個block,而每個block中的結果
只有幾百k,這在機器學習演算法的結果輸出中經常出現,這是一種很大的資源浪費,那麼如何同時避免太多的小檔案(block小檔案合併)?
其實有一種簡單方法,該方法需要你對輸出結果的資料量有個大概估計,然後使用dataframe中的coalesce函式來指定輸出的block數量
即可,具體使用**如下:
df.coalesce(2).write.parquet(path,mode)這裡df是指你要寫出的資料框,coalesce(2)指定了寫到2個block中,乙個block預設128m,path是你的寫出路徑,mode是寫出模式,常用的是
python讀取hdfs資料
載入包from hdfs.client import client self.filename user hdfs read.txt 讀取hdfs檔案內容,將每行存入陣列返回def read hdfs file self with client.read samples.csv encoding u...
flink讀取hdfs上多路徑的檔案
flink上多路徑的檔案支援似乎不太友好,目前沒有找到更好的辦法。在spark下可以使用的讀取hdfs多路徑的方式為 root data 20170101 root data 20170102 root data 20170103 root data 20170201 root data 20170...
python讀取hdfs並返回dataframe
不多說,直接上 filename tmp preprocess part 00000 hdfs檔案路徑 columnnames xx def readhdfs 讀取hdfs檔案 returns df dataframe hdfs資料 client client hdfshost 目前讀取hdfs檔案...