我想使用 Python 中的 Azure Databricks 将 Dataframe (pyspark.pandas.Dataframe) 作为 Excel 文件保存在 Azure Data Lake Gen2 上。 我已切换到 pyspark.pandas.Dataframe,因为它是自 Spark 3.2 以来推荐的一个。
有一种名为 to_excel 的方法(此处文档)允许将文件保存到 ADL 中的容器中,但我遇到了文件系统访问协议的问题。 在同一个班级中,我使用 abfss 使用 to_csv 和 to_parquet 方法,并且我想对 excel 使用相同的方法。
所以当我尝试使用以下方法保存它时:
import pyspark.pandas as ps
# Omit the df initialization
file_name = "abfss://[email protected]/FILE.xlsx"
sheet = "test"
df.to_excel(file_name, test)
我从 fsspec 收到错误:
ValueError: Protocol not known: abfss
有人可以帮助我吗?
提前致谢!
pandas 数据框不支持该协议。在 Databricks 上,您似乎只能通过 Spark dataframe 访问和写入 abfss 上的文件。所以,解决方案是在本地写入文件并手动移动到abfss。请参阅此答案此处。
您不能直接保存它,但您可以将其存储在临时位置并将其移动到您的目录。我的代码片段是:
import xlsxwriter import pandas as pd1
workbook = xlsxwriter.Workbook('data_checks_output.xlsx')
worksheet = workbook.add_worksheet('top_rows')
使用 XlsxWriter 作为引擎创建 Pandas Excel 编写器。
writer = pd1.ExcelWriter('data_checks_output.xlsx', engine='xlsxwriter')
output = dataset.limit(10)
output = output.toPandas()
output.to_excel(writer, sheet_name='top_rows',startrow=row_number)
writer.save()
写入后保存
运行下面的代码,这只是将文件的临时位置移动到您的指定位置。
下面的代码完成了移动文件的工作。
%sh
sudo mv file_name.xlsx /dbfs/mnt/fpmount/