问题描述
我们有一个 CSV 文件存储在 ADO (Azure DevOps) Git 存储库中。我运行了 Azure Databricks 集群,在工作区中我有一个 python 代码来读取这个 CSV 文件并将其转换为一个 spark 数据帧。但是每次文件发生更改时,我都必须从 ADO Git 手动下载它并上传到 Databricks 工作区。我使用以下命令来验证文件是否已上传:-
dbutils.fs.ls ("/FileStore/tables")
它列出了我的文件。然后我使用以下 Python 代码将此 CSV 转换为 Spark 数据帧:
file_location = "/FileStore/tables/MyFile.csv"
file_type = "csv"
# CSV options
infer_schema = "true"
first_row_is_header = "true"
delimiter = ","
# The applied options are for CSV files. For other file types,these will be ignored.
df = spark.read.format(file_type) \
.option("inferSchema",infer_schema) \
.option("header",first_row_is_header) \
.option("sep",delimiter) \
.load(file_location)
因此,每次 ADO Git 存储库中的文件发生更改时,都会涉及此手动步骤。是否有任何 Python 函数可以直接指向 ADO Git 的 master 分支中的文件副本?
解决方法
您有 2 个选择,具体取决于哪种对您来说更简单:
- 使用 Azure DevOps Python API 访问 Git 树中的 file (called item in API)。因为这个文件只能从驱动节点访问,所以你需要使用
dbutils.fs.cp
将文件从驱动节点复制到/FileStore/tables
- 在您的 Git 存储库中设置构建管道,该管道仅在提交特定文件时触发,如果发生更改,请使用 Databricks CLI(
databrics fs cp ...
命令)将文件直接复制到 DBFS。这里有一个 example 并没有完全按照您的意愿行事,但可以用作灵感。