91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何讀取hdfs上的parquet文件

發布時間:2020-07-18 10:23:51 來源:億速云 閱讀:1068 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了python如何讀取hdfs上的parquet文件,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

在使用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 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 = {
    "dfs.nameservices":"nameservice1",
    ......
}
hdfs = HDFileSystem(host = host, pars = conf)
......

python訪問HDFS HA的三種方法

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

1、hdfs3

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

from hdfs3 import HDFileSystem
hdfs = 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 hdfs
client = hdfs.client.InsecureClient(url="http://namenode:50070", user="hdfs")

HA訪問:

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

3、pyhdfs

安裝命令: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是寫出模式,常用的是

"overwrite"和"append"。

以上就是關于python如何讀取hdfs上的parquet文件的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临城县| 汪清县| 都昌县| 特克斯县| 嘉定区| 锦州市| 横山县| 慈利县| 临猗县| 阳朔县| 临西县| 红安县| 江源县| 象州县| 唐山市| 昆山市| 宿迁市| 收藏| 筠连县| 张掖市| 精河县| 逊克县| 苏州市| 吴川市| 明水县| 嘉荫县| 博乐市| 南部县| 滦平县| 新龙县| 新干县| 桃园市| 陆河县| 四平市| 舟山市| 西丰县| 新郑市| 渝北区| 镇巴县| 宜章县| 铜山县|