首页 > 解决方案 > 使用python写入HDFS中的excel文件

问题描述

尝试使用 zeppelin 笔记本在 HDFS 上使用 Openpyxl 将数据帧写入 excel 工作簿。

我的代码如下 -

with pd.ExcelWriter('hdfs:///ip/docs/excel_files/ds.xlsx', engine="openpyxl", mode="w") as writer:
    df.to_excel(writer, sheet_name='Sheet3') 

错误 -

Fail to execute line 2:      df.to_excel(writer, sheet_name='Sheet3')
Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-8199079202247699001.py", line 380, in <module>
    exec(code, _zcUserQueryNameSpace)
  File "<stdin>", line 2, in <module>
  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/excel.py", line 1191, in __exit__
    self.close()
  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/excel.py", line 1195, in close
    return self.save()
  File "/opt/anaconda3/lib/python3.7/site-packages/pandas/io/excel.py", line 1228, in save
    return self.book.save(self.path)
  File "/opt/anaconda3/lib/python3.7/site-packages/openpyxl/workbook/workbook.py", line 396, in save
    save_workbook(self, filename)
  File "/opt/anaconda3/lib/python3.7/site-packages/openpyxl/writer/excel.py", line 292, in save_workbook
    archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
  File "/opt/anaconda3/lib/python3.7/zipfile.py", line 1204, in __init__
    self.fp = io.open(file, filemode)

FileNotFoundError: [Errno 2] No such file or directory: 'hdfs:///ip/docs/excel_files/ds.xlsx'

标签: excelhdfsopenpyxlapache-zeppelinpandas.excelwriter

解决方案


如果您不在 Windows 上,请尝试使用 pydoop,如下所示:

import pydoop.hdfs as pydoop_hdfs

with pydoop_hdfs.open('hdfs://path_to_file/file.xlsx', mode='wb') as f:
    with pd.ExcelWriter(f, engine='xlsxwriter') as writer:
        df.to_excel(writer, sheet_name='Sheet')
        writer.save()

推荐阅读