日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

瀏覽:33日期:2022-07-22 15:00:13

1. 目標

通過hadoop hive或spark等數據計算框架完成數據清洗后的數據在HDFS上

爬蟲和機器學習在Python中容易實現

在Linux環境下編寫Python沒有pyCharm便利

需要建立Python與HDFS的讀寫通道

2. 實現

安裝Python模塊pyhdfs

版本:Python3.6, hadoop 2.9

讀文件代碼如下

from pyhdfs import HdfsClientclient=HdfsClient(hosts=’ghym:50070’)#hdfs地址res=client.open(’/sy.txt’)#hdfs文件路徑,根目錄/for r in res: line=str(r,encoding=’utf8’)#open后是二進制,str()轉換為字符串并轉碼 print(line)

寫文件代碼如下

from pyhdfs import HdfsClientclient=HdfsClient(hosts=’ghym:50070’,user_name=’hadoop’)#只有hadoop用戶擁有寫權限str=’hello world’client.create(’/py.txt’,str)#創建新文件并寫入字符串

上傳本地文件到HDFS

from pyhdfs import HdfsClientclient = HdfsClient(hosts=’ghym:50070’, user_name=’hadoop’)client.copy_from_local(’d:/pydemo.txt’, ’/pydemo’)#本地文件絕對路徑,HDFS目錄必須不存在

3. 讀取文本文件寫入csv

Python安裝pandas模塊

確認文本文件的分隔符

# pyhdfs讀取文本文件,分隔符為逗號,from pyhdfs import HdfsClientclient = HdfsClient(hosts=’ghym:50070’, user_name=’hadoop’)inputfile=client.open(’/int.txt’)# pandas調用讀取方法read_tableimport pandas as pddf=pd.read_table(inputfile,encoding=’gbk’,sep=’,’)#參數為源文件,編碼,分隔符# 數據集to_csv方法轉換為csvdf.to_csv(’demo.csv’,encoding=’gbk’,index=None)#參數為目標文件,編碼,是否要索引

補充知識:記 讀取hdfs 轉 pandas 再經由pandas轉為csv的一個坑

工作流程是這樣的:

讀取 hdfs 的 csv 文件,采用的是 hdfs 客戶端提供的 read 方法,該方法返回一個生成器。

將讀取到的數據按 逗號 處理,變為一個二維數組。

將二維數組傳給 pandas,生成 df。

經若干處理后,將 df 轉為 csv 文件并寫入hdfs。

問題是這樣的:

正常的數據:

ZERO,MEAN,STD,CV,INC,OPP,CS,IS_OUTNET

0,9.233,2.445,0.265,1.202,241,1,0

0,8.667,1.882,0.217,1.049,179,1,0

三行數據,正常走流程,沒有任何問題。

異常數據:

ZERO,MEAN,STD,CV,INC,OPP,CS,IS_OUTNET,probability,prediction

0,9.233,2.445,0.265,1.202,241,1,0,’[0.9653901649086855,0.03460983509131456]’,0.0

0,8.667,1.882,0.217,1.049,179,1,0,’[0.9653901649086855,0.03460983509131456]’,0.0

在每一行中都會有一個數組類似的數據,有一對引號包起來,中間存在逗號,不可以拆分。

為此,我的做法如下:

匹配逗號是被成對引號包圍的字符串。

將匹配到的字符串中的逗號替換為特定字符。

將替換后的新字符串替換回原字符串。

在將原字符串中的特定字符串替換為逗號。

本來這樣做沒有什么問題,但是在經由pandas轉為csv的時候,發現原來帶引號的字符串變為了前后各帶三個引號。

源數據:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

處理后的數據:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

方法如下:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

仔細研究對比了下數據,發現數據里的引號其實只是在純文本文件中用來標識其為字符串,并不應該存在于實際數據中。

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

而我每次匹配后都是原封不動替換回去,譬如:

源數據:

'[0.9653901649086855,0.03460983509131456]'

匹配替換后:

'[0.9653901649086855${dot}0.03460983509131456]'

這樣傳給pandas,它就會認為這個數據是帶引號的,在重新轉為csv的時候,就會進行轉義等操作,導致多出很多引號。

所以解決辦法就是在替換之前,將匹配時遇到的引號也去掉:

PATTERN = ’(?<=(?P<quote>[’']))([^,]+,[^,]+)+?(?=(?P=quote))’

中間 ([^,]+,[^,]+)+? 要用+?,因為必須確定是有這樣的組合才可以,并且非貪婪模式,故不可 ? 或者 *?

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

(ps:為了方便后面引用前面的匹配,我在環視匹配中創建了一個組)

再來個整體效果:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

為了說明效果,引用pandas的自帶讀取csv方法:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

可以看到pandas讀取出的該位置數據也是字符串,引號正是作為一個字符串聲明而存在。

再次修改正則:

def split_by_dot_escape_quote(string): ''' 按逗號分隔字符串,若其中有引號,將引號內容視為整體 ''' # 匹配引號中的內容,非貪婪,采用正向肯定環視, # 當左引號(無論單雙引)被匹配到,放入組quote, # 中間的內容任意,但是要用+?,非貪婪,且至少有一次匹配到字符, # 若*?,則匹配0次也可,并不會匹配任意字符(環視只匹配位置不匹配字符), # 由于在任意字符后面又限定了前面匹配到的quote,故只會匹配到', # +?則會限定前面必有字符被匹配,故'',或引號中任意值都可匹配到 pattern = re.compile(’(?=(?P<quote>[’'])).+?(?P=quote)’) rs = re.finditer(pattern, string) for data in rs: # 匹配到的字符串 old_str = data.group() # 將匹配到的字符串中的逗號替換為特定字符, # 以便還原到原字符串進行替換 new_str = old_str.replace(’,’, ’${dot}’) # 由于匹配到的引號僅為字符串申明,并不具有實際意義, # 需要把匹配時遇到的引號都去掉,只替換掉當前匹配組的引號 new_str = re.sub(data.group(’quote’), ’’, new_str) string = string.replace(old_str, new_str) sps = string.split(’,’) return map(lambda x: x.replace(’${dot}’, ’,’), sps) s = ’'2011,603','3510006998','F','5','5','0',''’print(list(split_by_dot_escape_quote(s)))

運行結果如下:

Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作

之前想的正則有些復雜,反而偏離了本意,還是對正則的認識不夠深。

以上這篇Python連接HDFS實現文件上傳下載及Pandas轉換文本文件到CSV操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91成人精品视频| 久久久久久久久99精品大| 美日韩一区二区三区| 国产精品欧美在线观看| 久久激五月天综合精品| 日韩啪啪电影网| 日本欧美国产| 中文在线а√在线8| 久久精品不卡| 国产丝袜一区| 精品国产欧美日韩一区二区三区| 国产精品va视频| 国产夫妻在线| 欧美日韩水蜜桃| 黄页网站一区| 日韩三区四区| 久久免费视频66| 日韩一区二区中文| 日韩午夜高潮| 中文字幕亚洲精品乱码| 中文字幕一区二区三区在线视频| 国产乱人伦精品一区| 国产 日韩 欧美 综合 一区| 日本韩国欧美超级黄在线观看| 亲子伦视频一区二区三区| 亚洲欧洲一区二区天堂久久| 久久福利毛片| 蜜桃久久av| 国产欧美日韩一级| 久久精品99久久无色码中文字幕| 男女男精品视频网| 麻豆国产欧美一区二区三区 | 国产毛片精品| 91精品啪在线观看国产18| 精品国产乱码久久久| 首页亚洲欧美制服丝腿| 国产精久久久| 亚洲日产av中文字幕| 日韩精品首页| 精品视频高潮| 中文字幕日本一区二区| 欧美激情福利| 好看的亚洲午夜视频在线| 国产一卡不卡| 久久国产亚洲| 国产精品三级| 国产免费成人| 98精品久久久久久久| 五月亚洲婷婷 | 日韩中文字幕亚洲一区二区va在线| 欧美a级一区二区| 一本一道久久a久久| 午夜日本精品| 日韩在线观看| 精品国产欧美| 国产精品高清一区二区| 日韩一区免费| 久久精品亚洲人成影院| 久久精品一本| 国产精品亚洲欧美| 亚洲免费成人av在线| 午夜一区在线| 亚洲第一精品影视| 久久影视一区| 婷婷激情图片久久| 国产一区欧美| 国产高清一区二区| 久久精品一区二区不卡| 日韩av免费大片| 久久影院资源站| 乱一区二区av| 国产不卡av一区二区| 国产一精品一av一免费爽爽| 美女av一区| 成人高清一区| 日本不卡免费高清视频在线| 国产福利电影在线播放| 精品一区在线| 亚洲精品一区二区在线播放∴| 亚洲精品一级| 久久久国产精品网站| 在线人成日本视频| 中日韩男男gay无套| 日本aⅴ精品一区二区三区 | 国产一区二区三区91| 色网在线免费观看| 欧美 日韩 国产精品免费观看| 在线综合亚洲| 激情综合五月| 五月天综合网站| 国产日韩亚洲| 欧美一区二区性| 欧美片网站免费| 国产精品一区亚洲| 精品国产亚洲日本| 国产91欧美| 亚洲神马久久| 精品久久福利| 六月丁香综合| 国产精品一页| 麻豆久久精品| 麻豆精品在线| 中文字幕日韩高清在线| 精品国产亚洲一区二区在线观看| 欧美资源在线| 精品视频一区二区三区在线观看| 久久久夜夜夜| 91免费精品国偷自产在线在线| 人人香蕉久久| 国产调教精品| 1000部精品久久久久久久久| 日本高清久久| 久久福利影视| 91免费精品| 999在线观看精品免费不卡网站| 日韩av影院| 欧美在线网站| 精品国产乱码久久久久久樱花| 日韩精品欧美激情一区二区| 日韩av二区在线播放| a国产在线视频| 日本视频在线一区| 久久国产中文字幕| 欧美激情五月| 伊人成人在线视频| 捆绑调教日本一区二区三区| 欧美自拍一区| 国产日韩欧美高清免费| 国产超碰精品| 久久国产精品成人免费观看的软件| 欧美日韩1区2区3区| 综合激情五月婷婷| 一区二区三区四区精品视频| 亚洲欧洲一区二区天堂久久| 女人天堂亚洲aⅴ在线观看| 天堂а√在线最新版中文在线| 国语精品一区| 日产精品一区| 伊人成人在线视频| 蜜臀久久久久久久| 日韩国产欧美三级| 国产精品chinese| 岛国精品一区| 日韩高清中文字幕一区二区| 一本大道色婷婷在线| yellow在线观看网址| 久久精品影视| 男女男精品网站| 国产精品3区| 天堂日韩电影| 欧美中文日韩| 国产精品亚洲成在人线| 日韩av在线播放网址| 在线一区电影| 91精品国产自产在线丝袜啪| 久久影视三级福利片| 久久国产欧美| 日韩成人av影视| 91欧美在线| 91精品福利| 亚洲精品精选| 91av亚洲| 久久国内精品视频| 日韩和的一区二在线| 日韩福利视频一区| 亚洲国产专区| 精品国产美女a久久9999| 亚洲欧美日本国产专区一区| 国产精品xxx在线观看| 合欧美一区二区三区| 精品一区二区男人吃奶| 中文字幕亚洲精品乱码| 日韩黄色大片| 国产激情综合| 9国产精品视频| 老司机免费视频一区二区| 蜜桃视频在线观看一区二区| 色在线视频观看| 精品亚洲精品| 亚州av一区| 亚洲欧美视频| 亚洲午夜av| 另类中文字幕国产精品| 在线国产精品一区| 国产成人精选| 91精品国产成人观看| 私拍精品福利视频在线一区| 一本色道久久精品| 亚洲免费影视| 欧美一级专区| 亚洲区欧美区| 国产情侣久久| 精品亚洲二区| 久久久噜噜噜| 视频在线观看国产精品| 欧美精品福利| 国产三级一区| 亚洲精品88| 午夜精品影视国产一区在线麻豆| 欧美国产亚洲精品|