无法读取Azure Databricks上的.xlsx文件

时间:2019-07-25 07:42:07

标签: python excel pyspark databricks

我正在使用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),他可以找到我的文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好吧,经过漫长的研究,我终于找到了解决方案。

在这里!

首先,您必须在集群中导入库“ spark-Excel”。 这是该库的页面:https://github.com/crealytics/spark-excel

您还需要“ spark_hadoopOffice”库,否则稍后将收到以下异常:

java.io.IOException: org/apache/commons/collections4/IteratorUtils

enter image description here

下载库时请注意群集中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数据框!

它对我有用,希望它将对其他人有所帮助。