将DataFrame从Databricks写入Data Lake

时间:2018-08-03 13:24:45

标签: azure azure-data-lake databricks

碰巧我正在使用Azure Databricks处理一些数据。此类数据位于Azure Data Lake Storage Gen1中。我将数据安装到DBFS中,但是现在,在转换数据之后,我想将其写回到数据湖中。

要装入数据,我使用了以下内容:

configs = {"dfs.adls.oauth2.access.token.provider.type": "ClientCredential",
       "dfs.adls.oauth2.client.id": "<your-service-client-id>",
       "dfs.adls.oauth2.credential": "<your-service-credentials>",
       "dfs.adls.oauth2.refresh.url": "https://login.microsoftonline.com/<your-directory-id>/oauth2/token"}

dbutils.fs.mount(source = "adl://<your-data-lake-store-account-name>.azuredatalakestore.net/<your-directory-name>", mount_point = "/mnt/<mount-name>",extra_configs = configs)

我想写一个.csv文件。对于此任务,我使用以下行

dfGPS.write.mode("overwrite").format("com.databricks.spark.csv").option("header", "true").csv("adl://<your-data-lake-store-account-name>.azuredatalakestore.net/<your-directory-name>")

但是,出现以下错误:

IllegalArgumentException: u'No value for dfs.adls.oauth2.access.token.provider found in conf file.'

有什么可以帮助我的代码吗?或引导我浏览的链接。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果安装Azure Data Lake Store,则应使用安装点存储数据,而不是“ adl:// ...”。有关如何挂载Azure Data Lake Store的详细信息  (ADLS)第1代,请参见Azure Databricks documentation。您可以验证安装点是否适用于:

dbutils.fs.ls("/mnt/<newmountpoint>")

因此,请在安装ADLS Gen 1之后尝试

dfGPS.write.mode("overwrite").format("com.databricks.spark.csv").option("header", "true").csv("mnt/<mount-name>/<your-directory-name>")

如果您正确添加了安装点,并且您还具有ADLS上的服务主体的访问权限,这应该可以工作。

Spark总是在一个目录中写入多个文件,因为每个分区都是单独保存的。另请参见以下stackoverflow question