色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

python讀取hdfs上的parquet文件方式

瀏覽:7日期:2022-07-22 15:00:03

在使用python做大數據和機器學習處理過程中,首先需要讀取hdfs數據,對于常用格式數據一般比較容易讀取,parquet略微特殊。從hdfs上使用python獲取parquet格式數據的方法(當然也可以先把文件拉到本地再讀取也可以):

1、安裝anaconda環境。

2、安裝hdfs3。

conda install hdfs3

3、安裝fastparquet。

conda install fastparquet

4、安裝python-snappy。

conda install python-snappy

5、讀取文件

##namenode mode:from hdfs3 import HDFileSystemfrom 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 HDFileSystemfrom fastparquet import ParquetFile host = 'nameservice1'conf = { 'dfs.nameservices':'nameservice1', ......}hdfs = HDFileSystem(host = host, pars = conf)......

python訪問HDFS HA的三種方法

python訪問hdfs常用的包有三個,如下:

1、hdfs3

其實從安裝便捷性和使用上來說,并不推薦hdfs3,因為他的系統依賴和網絡要求較高,但是某些情況下使用hdfs3會比較方便,官網資料點這里。如上面介紹,IP直接訪問namenode:

from hdfs3 import HDFileSystemhdfs = HDFileSystem(host=namenode, port=8020)hdfs.ls(’/tmp’)

HA訪問:

host = 'nameservice1'conf = {'dfs.nameservices': 'nameservice1', 'dfs.ha.namenodes.nameservice1': 'namenode113,namenode188', 'dfs.namenode.rpc-address.nameservice1.namenode113': 'hostname_of_server1:8020', 'dfs.namenode.rpc-address.nameservice1.namenode188': 'hostname_of_server2:8020', 'dfs.namenode.http-address.nameservice1.namenode188': 'hostname_of_server1:50070', 'dfs.namenode.http-address.nameservice1.namenode188': 'hostname_of_server2:50070', 'hadoop.security.authentication': 'kerberos'}fs = HDFileSystem(host=host, pars=conf) ##或者下面這種配置host = 'ns1'conf = { 'dfs.nameservices':'ns1', 'dfs.ha.namenodes.ns1':'namenode122,namenode115', 'dfs.namenode.rpc-address.ns1.namenode122':'nnlab01:8020', 'dfs.namenode.servicerpc-address.ns1.namenode122':'nnlab01:8022', 'dfs.namenode.http-address.ns1.namenode122':'nnlab01:50070', 'dfs.namenode.https-address.ns1.namenode122':'nnlab01:50470', 'dfs.namenode.rpc-address.ns1.namenode115':'nnlab02:8020', 'dfs.namenode.servicerpc-address.ns1.namenode115':'nnlab02:8022', 'dfs.namenode.http-address.ns1.namenode115':'nnlab02:50070', 'dfs.namenode.https-address.ns1.namenode115':'nnlab02:50470',}hdfs = HDFileSystem(host = host, pars = conf)

2、hdfs

這種方法在使用的時候配置比較簡單,官網資料也比較豐富,但是需要注意的是該API可以模擬用戶訪問,權限較大。IP直接訪問:

import hdfsclient = hdfs.client.InsecureClient(url='http://namenode:50070', user='hdfs')

HA訪問:

import hdfsclient = hdfs.client.InsecureClient(url='http://namenode1:50070;http://namenode2:50070', user='hdfs')

3、pyhdfs

安裝命令:pip install PyHDFS

官網地址,直接訪問:

import pyhdfsclient = pyhdfs.HdfsClient(hosts='namenode:50070',user_name='hdfs')

HA訪問

import pyhdfsclient = 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是寫出模式,常用的是

'overwrite'和'append'。

以上這篇python讀取hdfs上的parquet文件方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 男女毛片免费视频看 | 夜色成人性y | 国内国语一级毛片在线视频 | 久久免费成人 | 亚洲综合久久久久久中文字幕 | 欧美一级毛片免费播放器 | 九九精品激情在线视频 | 手机看片日韩日韩韩 | 99久久www免费| 欧美精品久久久亚洲 | 亚洲系列第一页 | 国产一级爱做片免费观看 | 黄色在线播放 | 国产成人a在一区线观看高清 | 萌白酱粉嫩jk福利视频在线观看 | 粉嫩jk制服美女啪啪 | 贵州美女一级纯黄大片 | 国产欧美日韩在线人成aaaa | 91国内精品久久久久免费影院 | 国产永久免费高清动作片www | 成年男人的天堂 | 男人看片网址 | 一级毛片国产 | 免费一级特黄欧美大片久久网 | 欧美一级日韩一级亚洲一级 | 日韩一区二区精品久久高清 | 91久久精品国产免费一区 | 欧美成人二区 | 久久男人的天堂色偷偷 | 97超频国产在线公开免费视频 | 国产成人精品女人不卡在线 | 一二三中文乱码亚洲乱码 | 99久久国产| 欧美成人国产一区二区 | 久久精品国产99国产精品免费看 | 曰韩一级| 午夜mm131美女做爰视频 | 久国产| 中国农村一级毛片 | 成人在免费观看视频国产 | 成人欧美一区二区三区在线观看 |