python讀寫hdfs四種不同格式文件

從hdfs讀寫 parquet 牡借、textfile 、 csv 、 xlsx四種文件格式代碼簡寫后如下:

import io
import os
import uuid
import hdfs
import pandas as pd
from hdfs.ext.kerberos import KerberosClient
from krbcontext import krbcontext
from hdfs import HdfsError


def Myhdfs():
    def __init__(self,url):
        self.client = self.get_client(url)

    def get_client(url):
        with krbcontext(using_keytab=True,keytab_file='keytab文件地址',principal='用戶名',ccache_file='緩存文件'):
            hclient = KerberosClient(url,session='')
            return hclient

    def df_writeto_parquet(self,df,path):
        if df.empty:
            return False
        path = os.path.join(path,str(uuid.uuid4()))
        byt = io.BytesIO()
        df.to_parquet(byt)
        self.client.write(path,byt.getvalue(),True)
        return True

    def df_writeto_textfile(self,df,path):
        path = os.path.join(path,str(uuid.uuid4()))
        rest = '\n'.join([','.join(row) for n,row in df.iterrows()])
        self.client.write(path,rest)
        return True

    def df_readfrom_hdfs(self,path,format = 'textfile',columns = None):
        if format =='textfile':
            if columns:
                with self.client.read(path) as reader:
                    be = str(reader.read(),'utf-8')
                    data = map(lambda s:s.split('\001'),be.split('\n'))
                    df = pd.DataFrame(data=data,columns=columns)
                    return df
            else:
                raise Exception('columns 不能為空')
        elif format =='parquet':
            with self.client.read(path) as reader:
                be = io.BytesIO(reader.read())
                df = pd.read_parquet(be)
                return df
        elif format =='csv':
            for code in ['gbk','utf-8','gb18030']:
                try:
                    with self.client.read(path,encoding = code) as reader:
                        df = pd.read_csv(reader)
                        return df
                except UnicodeEncodeError:
                    continue
                except Exception as e:
                    print(e)
                    continue
        elif format == 'xls':
            with self.client.read(path) as reader:
                df = pd.read_excel(reader.read())
                return df

    def show_files(self,path,filelist):
        files = self.client.list(path)
        for file in files:
            curpath = os.path.join(path,file)
            try:
                self.show_files(curpath,filelist)
            except HdfsError as e:
                filelist.append(curpath)
            except Exception as e:
                print(e)
        return filelist

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涮较,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冈止,老刑警劉巖狂票,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨伤,死亡現(xiàn)場離奇詭異郊闯,居然都是意外死亡,警方通過查閱死者的電腦和手機枫耳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門怨咪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屋剑,“玉大人,你說我怎么就攤上這事诗眨“ω遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵匠楚,是天一觀的道長巍膘。 經(jīng)常有香客問我,道長芋簿,這世上最難降的妖魔是什么峡懈? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮与斤,結(jié)果婚禮上肪康,老公的妹妹穿的比我還像新娘。我一直安慰自己撩穿,他們只是感情好磷支,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著食寡,像睡著了一般雾狈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抵皱,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天善榛,我揣著相機與錄音,去河邊找鬼呻畸。 笑死移盆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伤为。 我是一名探鬼主播味滞,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剑鞍?” 一聲冷哼從身側(cè)響起昨凡,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚁署,沒想到半個月后便脊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡光戈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年哪痰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片久妆。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晌杰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筷弦,到底是詐尸還是另有隱情肋演,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布烂琴,位于F島的核電站爹殊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奸绷。R本人自食惡果不足惜梗夸,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望号醉。 院中可真熱鬧反症,春花似錦、人聲如沸畔派。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽父虑。三九已至该酗,卻和暖如春授药,著一層夾襖步出監(jiān)牢的瞬間士嚎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工悔叽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莱衩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓娇澎,卻偏偏與公主長得像笨蚁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容