Databricks - pyspark.pandas.Dataframe.to_excel 无法识别 abfss 协议

问题描述 投票:0回答:3

我想使用 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

有人可以帮助我吗?

提前致谢!

python pandas azure apache-spark azure-databricks
3个回答
2
投票

尝试使用“

abfs://
”而不是“
abfss://
” - 对我有用。 请参阅此处了解更多信息。


1
投票

pandas 数据框不支持该协议。在 Databricks 上,您似乎只能通过 Spark dataframe 访问和写入 abfss 上的文件。所以,解决方案是在本地写入文件并手动移动到abfss。请参阅此答案此处


1
投票

您不能直接保存它,但您可以将其存储在临时位置并将其移动到您的目录。我的代码片段是:

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/
© www.soinside.com 2019 - 2024. All rights reserved.