我正在使用Python在Azure databricks笔记本上,但在读取Excel文件并将其放入Spark数据框时遇到问题。
我看到有同样问题的主题,但是它们似乎对我没有用。
我尝试了以下解决方案:
https://sauget-ch.fr/2019/06/databricks-charger-des-fichiers-excel-at-scale/
我确实添加了凭据以访问Azure Data Lake上的文件。
在安装完我需要的所有库之后,我正在执行以下代码:
import xlrd
import azure.datalake.store
filePathBsp = projectFullPath + "BalanceShipmentPlan_20190724_19h31m37s.xlsx";
bspDf = pd.read_excel(AzureDLFileSystem.open(filePathBsp))
在那里,我用:
"AzureDLFileSystem.open"
要在Azure Data Lake中获取文件,因为:
"pd.read_excel"
不允许我把文件拿到湖上。
问题是,它给了我这个错误:
TypeError: open() missing 1 required positional argument: 'path'
我确定可以访问此文件,因为尝试时: spark.read.csv(filePathBsp),他可以找到我的文件。
有什么想法吗?
答案 0 :(得分:0)
好吧,经过漫长的研究,我终于找到了解决方案。
在这里!
首先,您必须在集群中导入库“ spark-Excel”。 这是该库的页面:https://github.com/crealytics/spark-excel
您还需要“ spark_hadoopOffice”库,否则稍后将收到以下异常:
java.io.IOException: org/apache/commons/collections4/IteratorUtils
下载库时请注意群集中Scala的版本,这很重要。
然后,您必须通过以下方式安装Azure Data Lake Storage(ADLS)的凭据:
# Mount point
udbRoot = "****"
configs = {
"dfs.adls.oauth2.access.token.provider.type": "ClientCredential",
"dfs.adls.oauth2.client.id": "****",
"dfs.adls.oauth2.credential": "****",
"dfs.adls.oauth2.refresh.url": "https://login.microsoftonline.com/****/oauth2/token"
}
# unmount
#dbutils.fs.unmount(udbRoot)
# Mounting
dbutils.fs.mount(
source = "adl://****",
mount_point = udbRoot,
extra_configs = configs
)
您只需执行一次mount命令。
然后,您可以执行以下代码行:
testDf = spark.read.format("com.crealytics.spark.excel").option("useHeader", True).load(fileTest)
display(testDf)
您在这里!您在Azure Data Lake Storage中有一个来自Excel文件的Spark数据框!
它对我有用,希望它将对其他人有所帮助。