如何使用pyspark从Databricks内部的ADLS Gen2 Datalake中的“文件共享”中读取csv文件

时间:2020-03-30 11:33:00

标签: pyspark azure-databricks azure-data-lake-gen2

我有带有“ Blob容器”和“文件共享”的ADLS Gen2 Datalake。我已经将Blob容器安装在Databricks笔记本中,因此我可以读取databricks笔记本中的所有内容。

“文件共享”中也有一些文件,但是我无法使用pyspark将这些文件读入Databricks的数据帧中。

我已经为文件共享创建了访问签名,并且我也获得了共享中文件之一的URL。该网址可以通过Postman正常运行。我可以使用网址下载该文件。

示例网址如下所示:

https://somedatalakename.file.core.windows.net/file_share_name/Data_20200330_1030.csv?sv=yyyy-mm-dd&si=somename&sr=s&sig=somerandomsignature%3D

如何使用pyspark通过数据块将同一文件共享中的同一csv读取到数据帧中?

我也尝试过

from pyspark import SparkFiles
spark.sparkContext.addFile(uri)
call_df = spark.read.format("csv").option("header", "true").load("file://" + SparkFiles.get("Data_" + date_str + "_1030.csv"))

然后出现以下错误:

org.apache.spark.sql.AnalysisException: Path does not exist: file:/local_disk0/spark-ce42ed1b-5d82-4559-9000-d1bf3621539e/userFiles-eaf0fd36-68aa-409e-8610-a7909635b006/Data_20200330_1030.csv

请给我一些有关如何解决此问题的指示。谢谢。

1 个答案:

答案 0 :(得分:0)

您的加载语法问题。 file:在Databricks中不起作用,因此您需要将其替换为dbfs,即Databricks文件系统。 加载文件的命令:

spark.read.format("csv").option("header","true").load(f"dbfs:/path/to/your/directory/FileName.csv")