提问者:小点点

数据库-pyspark. pandas.Dataframe.to_excel不能识别abfss协议


我想使用Python中的Azure Database ricks将数据框(pyspark. pandas.Dataframe)保存为Azure Data Lake Gen2上的Excel文件。我已切换到pyspark.pandas.Dataframe,因为它是自Spark 3.2以来推荐的。

有一种叫做to_excel的方法(这里是文档),它允许将文件保存到ADL的容器中,但是我遇到了文件系统访问协议的问题。在同一个类中,我使用to_csv和to_parquet方法使用abfss,我想在excel中使用相同的方法。

所以当我尝试保存它使用:

import pyspark.pandas as ps
# Omit the df initialization
file_name = "abfss://CONTAINER@SERVICEACCOUNT.dfs.core.windows.net/FILE.xlsx"
sheet = "test"
df.to_excel(file_name, test)

我从fsspec得到错误:

ValueError: Protocol not known: abfss

有人能帮帮我吗?

提前感谢!


共2个答案

匿名用户

熊猫数据帧不支持该协议。在数据库上,您似乎只能通过Spark数据帧访问和写入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()

write.save之后

运行下面的代码,它只不过是将文件的临时位置移动到您指定的位置。

下面的代码完成了移动文件的工作。

%sh
sudo mv file_name.xlsx /dbfs/mnt/fpmount/