欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python讀取hdfs上的parquet文件方式

 更新時間:2020年06月06日 09:33:17   作者:二加三等于五  
這篇文章主要介紹了python讀取hdfs上的parquet文件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

1、安裝anaconda環(huán)境。

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

其實(shí)從安裝便捷性和使用上來說,并不推薦hdfs3,因為他的系統(tǒng)依賴和網(wǎng)絡(luò)要求較高,但是某些情況下使用hdfs3會比較方便,官網(wǎng)資料點(diǎn)這里。如上面介紹,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

這種方法在使用的時候配置比較簡單,官網(wǎng)資料也比較豐富,但是需要注意的是該API可以模擬用戶訪問,權(quán)限較大。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

官網(wǎng)地址,直接訪問:

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")

補(bǔ)充知識:python spark中parquet文件寫到hdfs,同時避免太多的小文件(block小文件合并)

在pyspark中,使用數(shù)據(jù)框的文件寫出函數(shù)write.parquet經(jīng)常會生成太多的小文件,例如申請了100個block,而每個block中的結(jié)果

只有幾百K,這在機(jī)器學(xué)習(xí)算法的結(jié)果輸出中經(jīng)常出現(xiàn),這是一種很大的資源浪費(fèi),那么如何同時避免太多的小文件(block小文件合并)?

其實(shí)有一種簡單方法,該方法需要你對輸出結(jié)果的數(shù)據(jù)量有個大概估計,然后使用Dataframe中的coalesce函數(shù)來指定輸出的block數(shù)量

即可,具體使用代碼如下:

df.coalesce(2).write.parquet(path,mode)

這里df是指你要寫出的數(shù)據(jù)框,coalesce(2)指定了寫到2個block中,一個block默認(rèn)128M,path是你的寫出路徑,mode是寫出模式,常用的是

"overwrite"和"append"。

以上這篇python讀取hdfs上的parquet文件方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3.5以上版本lxml導(dǎo)入etree報錯的解決方案

    Python3.5以上版本lxml導(dǎo)入etree報錯的解決方案

    這篇文章主要介紹了Python3.5以上版本lxml導(dǎo)入etree報錯的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • Python 執(zhí)行字符串表達(dá)式函數(shù)(eval exec execfile)

    Python 執(zhí)行字符串表達(dá)式函數(shù)(eval exec execfile)

    今天在網(wǎng)上搜尋一些應(yīng)用的例子時,發(fā)現(xiàn)有人用TK僅僅幾行代碼就寫了個簡易的計算器,驚為天人?;貞浧饎倢W(xué)軟件技術(shù)基礎(chǔ)時編寫簡易計算器的艱辛,頓時淚流滿面
    2014-08-08
  • 一文帶你了解Python中pymysql的使用

    一文帶你了解Python中pymysql的使用

    pymysql就是聯(lián)通mysql實(shí)現(xiàn)python窗口與mysql數(shù)據(jù)庫交互的庫,十分方便操作,這篇文章將詳細(xì)說明如何掌握并使用該庫,感興趣的可以了解一下
    2023-02-02
  • python優(yōu)化測試穩(wěn)定性的失敗重試工具pytest-rerunfailures詳解

    python優(yōu)化測試穩(wěn)定性的失敗重試工具pytest-rerunfailures詳解

    筆者在執(zhí)行自動化測試用例時,會發(fā)現(xiàn)有時候用例失敗并非代碼問題,而是由于服務(wù)正在發(fā)版,導(dǎo)致請求失敗,從而降低了自動化用例的穩(wěn)定性,那該如何增加失敗重試機(jī)制呢?帶著問題我們一起探索
    2023-10-10
  • python實(shí)現(xiàn)獲取Ip歸屬地等信息

    python實(shí)現(xiàn)獲取Ip歸屬地等信息

    本文給大家簡單介紹了下如何使用Python實(shí)現(xiàn)獲取IP歸屬地信息的方法和代碼,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-08-08
  • 使用 Python 和 Selenium 解決 Cloudflare 驗證碼的問題

    使用 Python 和 Selenium 解決 Cloudflare&

    Cloudflare 驗證碼是一種用于區(qū)分人類用戶和自動化機(jī)器人的功能,它是 Cloudflare 安全服務(wù)的重要組成部分,旨在防御網(wǎng)站免受自動化攻擊和濫用,這篇文章主要介紹了使用 Python 和 Selenium 解決 Cloudflare 驗證碼,需要的朋友可以參考下
    2024-06-06
  • python算法學(xué)習(xí)之桶排序算法實(shí)例(分塊排序)

    python算法學(xué)習(xí)之桶排序算法實(shí)例(分塊排序)

    本代碼介紹了python算法學(xué)習(xí)中的桶排序算法實(shí)例,大家參考使用吧
    2013-12-12
  • Python聚類算法之DBSACN實(shí)例分析

    Python聚類算法之DBSACN實(shí)例分析

    這篇文章主要介紹了Python聚類算法之DBSACN,結(jié)合實(shí)例形式詳細(xì)分析了DBSACN算法的原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 發(fā)布你的Python模塊詳解

    發(fā)布你的Python模塊詳解

    這篇文章主要介紹了發(fā)布你的Python模塊詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Python的pywifi無線網(wǎng)絡(luò)庫的具體使用

    Python的pywifi無線網(wǎng)絡(luò)庫的具體使用

    pywifi是一個基于Python的用于操作無線網(wǎng)絡(luò)的庫,本文就來介紹一下pywifi的安裝及實(shí)際應(yīng)用場景使用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論