【python 資料框寫入hdfs】windows使用python hdfs模組寫入hdfs的一個坑
阿新 • • 發佈:2018-12-11
目標:在windows平臺數據框寫入hdfs
# -*- encoding=utf-8 -*- import hdfs import datetime import pandas as pd import time time1=time.time() # 自定義獲取昨天日期的函式 def getYesterday(): """ :return: 獲取昨天日期 """ today = datetime.date.today() oneday=datetime.timedelta(days=1) yesterday=today-oneday # 日期轉字串 partition_date=yesterday.strftime('%Y-%m-%d') return partition_date # 資料框寫到hdfs檔案 def dataframe_write_to_hdfs(client, hdfs_path, dataframe): """ :param client: :param hdfs_path: :param dataframe: :return: """ client.write(hdfs_path, dataframe.to_csv(header=False,index=False,sep="\t"), encoding='utf-8',overwrite=True) if __name__ == '__main__': partition_date=getYesterday() # 注意這裡用InsecureClient 這種方式,用對應的使用者寫入對應對應使用者擁有的許可權的目錄下 client = hdfs.InsecureClient("host:50070",user='admin') hdfs_path = "/user/admin/deploy/user_lable_dimension/partition_type=brush/red-%s.txt" % partition_date # 讀取資料集 data=pd.read_csv('C:/Users/xiaohu/Desktop/文字挖掘/使用者標籤體系二期/使用者身份標籤/使用者下單偏好/刷單/red-%s.txt' % partition_date,sep='\t') data.columns = ['app_id', 'user_id', 'login_name', 'cert_no', 'type', 'lable', 'value', 'record_date'] print(data) # 呼叫函式上傳資料集到hdfs dataframe_write_to_hdfs(client,hdfs_path,data) time2 = time.time() print(u'ok,上傳dataframe資料集到hdfs結束!') print(u'總共耗時:' + str(time2 - time1) + 's')
windows平臺 寫入hdfs 並不會一帆風順,會出現如下異常資訊:
原因分析:
windows 寫入檔案到hdfs
本地window 機器需要與 叢集的各個DataNode節點保持網路通暢
解決辦法:
修改客戶機本地的對映,檔案是C:\Windows\System32\drivers\etc\host
修改host檔案
增加叢集的IP地址和域名的對應管理
最後成功寫入hdfs