【问题标题】:Azure Data Lake Store as EXTERNAL TABLE in DatabricksAzure Data Lake Store 作为 Databricks 中的外部表
【发布时间】:2018-03-28 19:13:19
【问题描述】:

如何在 Azure Databricks 中创建从 Azure Data Lake Store 读取的外部表?如果可能的话,我无法在文档中看到。我在 Azure Data Lake Store 的特定文件夹中有一组 CSV 文件,我想在 Azure Databricks 中创建一个指向 CSV 文件的 CREATE EXTERNAL TABLE。

【问题讨论】:

    标签: azure azure-storage azure-data-lake databricks


    【解决方案1】:

    1。引用挂载目录

    您可以将 Azure Data Lake Store (ADLS) 装载到 Azure Databricks DBFS(需要 4.0 运行时或更高版本):

        # Get Azure Data Lake Store credentials from the secret store
        clientid = dbutils.preview.secret.get(scope = "adls", key = "clientid")
        credential = dbutils.preview.secret.get(scope = "adls", key = "credential")
        refreshurl = dbutils.preview.secret.get(scope = "adls", key = "refreshurl")
         accounturl = dbutils.preview.secret.get(scope = "adls", key = "accounturl")
    
        # Mount the ADLS
        configs = {"dfs.adls.oauth2.access.token.provider.type": "ClientCredential",
           "dfs.adls.oauth2.client.id": clientid,
           "dfs.adls.oauth2.credential": credential,
           "dfs.adls.oauth2.refresh.url": refreshurl}
    
        dbutils.fs.mount(
           source = accounturl,
           mount_point = "/mnt/adls",
           extra_configs = configs)
    

    表创建的工作方式与 DBFS 相同。只需使用 ADLS 中的目录引用挂载点,例如。 g.:

        %sql 
        CREATE TABLE product
        USING CSV
        OPTIONS (header "true", inferSchema "true")
        LOCATION "/mnt/adls/productscsv/"
    

    location 子句自动暗示EXTERNAL。另见Azure Databricks Documentation

    2。直接在表定义中引用Data Lake Store

    您也可以直接引用存储而不安装存储。如果元数据或部分代码也用于其他平台,则这种情况是有意义的。在这种情况下,必须在集群或笔记本级别定义对存储的访问(请参阅 Databricks documentation 了解 ADLS Gen1 或 this documentation 了解 Gen2 配置详细信息)或使用 Azure AD Credential Passthrough。 ADLS Gen1 的表定义如下所示:

    CREATE TABLE sampletable
    (L_ORDERKEY BIGINT,
     L_PARTKEY BIGINT,
     L_SUPPKEY BIGINT,
     L_SHIPMODE STRING,
     L_COMMENT STRING)
     USING csv
     OPTIONS ('DELIMITER' '|')
     LOCATION "adl://<your adls>.azuredatalakestore.net/directory1/sampletable"
    ; 
    

    对于 Azure Data Lake Gen2,位置参考如下所示:

     LOCATION "abfss://<file_system>@<account_name.dfs.core.windows.net/directory/tablename"
    

    【讨论】:

    • 有没有不将ADLS挂载到dbfs的解决方案?
    • 感谢您的信息,我尝试使用 ADLS gen2 使用主体凭据执行相同操作。但它似乎只适用于 gen1 ADLS。 stackoverflow.com/questions/56792095/…
    • 您在 ADLS Gen2 中使用了类似的位置:abfss://@.dfs.core.windows.net/dir/sampletable?
    • 是的,我在上面评论中提到的链接中也提到过。
    【解决方案2】:

    您应该考虑查看此链接:https://docs.azuredatabricks.net/spark/latest/data-sources/azure/azure-datalake.html

    使用 Spark API 访问 Azure Data Lake Store 要从您的 Data Lake Store 帐户中读取数据,您可以将 Spark 配置为在笔记本中使用具有以下 sn-p 的服务凭证:

    spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential") spark.conf.set("dfs.adls.oauth2.client.id", "{YOUR SERVICE CLIENT ID}") spark.conf.set("dfs.adls.oauth2.credential", "{YOUR SERVICE CREDENTIALS}") spark.conf.set("dfs.adls.oauth2.refresh.url", "https://login.microsoftonline.com/{YOUR DIRECTORY ID}/oauth2/token")

    没有提到外部表的使用。

    【讨论】:

    • 先看问题!这种方法发布在数千个博客和论坛上。
    • 如果上述内容不适合您的情况,请随时添加对此问题的答案。请注意,这个答案已有一年多的历史,这可能变得无关紧要。 stackoverflow 的目标是共享信息和指导。如果您有好的指导或答案,请发布以帮助他人。
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多