从 Internet 下载数据

可以使用 Azure Databricks 笔记本将数据从公共 URL 下载到已附加至群集驱动程序的卷存储。 如果从云对象存储访问数据,使用 Apache Spark 直接访问数据可提供更好的结果。 请参阅连接到数据源

Azure Databricks 群集提供通用计算,除了运行 Apache Spark 命令之外,你还可以运行任意代码。 由于任意命令是针对群集的根目录而不是 DBFS 根目录执行的,因此在使用 Apache Spark 读取下载的数据之前,必须将其移到新位置。

注意

某些工作区配置可能会阻止访问公共 Internet。 如果需要扩展的网络访问权限,请咨询工作区管理员。

使用 Bash、Python 或 Scala 下载文件

Azure Databricks 不提供任何用于从 Internet 下载数据的本机工具,但你可以使用以受支持语言编写的开源工具。 以下示例使用 Bash、Python 和 Scala 包下载同一文件。

Bash

%sh curl https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv --output /tmp/curl-subway.csv

Python

import urllib
urllib.request.urlretrieve("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv", "/tmp/python-subway.csv")

Scala

import java.net.URL
import java.io.File
import org.apache.commons.io.FileUtils

FileUtils.copyURLToFile(new URL("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv"), new File("/tmp/scala-subway.csv"))

由于这些文件下载到了已附加至驱动程序的卷存储,因此请使用 %sh 查看这些文件,如以下示例所示:

%sh ls /tmp/

可以使用 Bash 命令来预览以这种方式下载的文件的内容,如以下示例所示:

%sh head /tmp/curl-subway.csv

使用 dbutils 移动数据

若要使用 Apache Spark 访问数据,请将其从当前位置移动。 此数据的当前位置在仅对驱动程序可见的临时卷存储中。 Azure Databricks 从文件源并行加载数据,因此文件必须对计算环境中的所有节点可见。 虽然 Azure Databricks 支持多种外部数据源,但基于文件的数据访问通常假设访问的是云对象存储。 请参阅连接到数据源

使用 Databricks 实用工具 (dbutils) 可将文件从附加到驱动程序的卷存储移到 DBFS 中可访问的其他位置,包括已配置访问权限的外部对象存储位置。 以下示例将数据移到 DBFS 根目录中的某个目录,该目录是在初始工作区部署期间配置的云对象存储位置。

dbutils.fs.mv("file:/tmp/curl-subway.csv", "dbfs:/tmp/subway.csv")

读取下载的数据

将数据移到云对象存储后,可以照常读取数据。 以下代码读取已移至 DBFS 根目录的 CSV 数据。

df = spark.read.format("csv").option("header", True).load("/tmp/subway.csv")
display(df)