【问题标题】:Can't read .xlsx file on Azure Databricks无法读取 Azure Databricks 上的 .xlsx 文件
【发布时间】:2019-12-03 10:09:42
【问题描述】:

我在使用 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" 

不让我把我的文件拿到 Lake。

问题是,它给了我这个错误:

TypeError: open() missing 1 required positional argument: 'path'

我确定我可以访问此文件,因为当我尝试时:

spark.read.csv(filePathBsp) 

他可以找到我的文件。

有什么想法吗?

【问题讨论】:

    标签: python excel pyspark databricks


    【解决方案1】:

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

    来了!

    首先,您必须在集群中导入库“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 数据框!

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

    【讨论】:

    • 如何从 xlsx 文件中读取特定工作表。我使用了.option("sheetName", "Info"),但无论提到的工作表名称如何,都会阅读第一张工作表。
    • 做这样的事情:.option("dataAddress", "Sheet!") 在您的情况下,您需要的属性是“dataAddress”,而您忘记了“!”在工作表名称的末尾。不放就不行。
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2021-09-13
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多