本文介绍将数据从互联网添加到 Azure Databricks 的模式。
Azure Databricks 不提供任何用于从互联网下载数据的本机工具,但你可以使用以受支持语言编写的开源工具来使用笔记本下载文件。
Databricks 建议使用 Unity Catalog 卷来存储所有非表格数据。 你可以选择在下载过程中指定某个卷作为目标,也可以在下载后将数据移动到某个卷。
备注
如果未指定输出路径,则大多数开放源代码工具都面向临时存储中的目录。 请参阅将文件下载到临时存储。
卷不支持随机写入。 如果需要解压缩下载的文件,Databricks 建议先将它们下载到临时存储并解压缩,然后再移动到卷。 请参阅展开和读取 Zip 压缩文件。
如果从云对象存储访问数据,使用 Apache Spark 直接访问数据可提供更好的结果。 请参阅连接到数据源。
某些工作区配置可能会阻止访问公共 Internet。 如果需要扩展的网络访问权限,请咨询工作区管理员。
Databricks 建议将所有非表格数据存储在 Unity Catalog 卷中。
以下示例使用适用于 Bash、Python 和 Scala 的包将文件下载到 Unity Catalog 卷:
%sh curl https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv --output /Volumes/my_catalog/my_schema/my_volume/curl-subway.csv
import urllib
urllib.request.urlretrieve("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv", "/Volumes/my_catalog/my_schema/my_volume/python-subway.csv")
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("/Volumes/my_catalog/my_schema/my_volume/scala-subway.csv"))
以下示例使用适用于 Bash、Python 和 Scala 的包将文件下载到附加到驱动程序的临时存储:
%sh curl https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv --output /tmp/curl-subway.csv
import urllib
urllib.request.urlretrieve("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv", "/tmp/python-subway.csv")
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
若要使用 Apache Spark 访问数据,必须将数据从临时存储移动到云对象存储。 Databricks 建议使用卷来管理对云对象存储的所有访问。 请参阅连接到数据源。
Databricks 实用程序 (dbutils
) 允许你将文件从附加到驱动程序的临时存储移动到其他位置,包括 Unity Catalog 卷。 以下示例将数据移动到一个示例卷:
dbutils.fs.mv("file:/tmp/curl-subway.csv", "/Volumes/my_catalog/my_schema/my_volume/subway.csv")
将数据移动到卷后,你可以照常读取数据。 下面的代码读取已移动到卷的 CSV 数据:
df = spark.read.format("csv").option("header", True).load("/Volumes/my_catalog/my_schema/my_volume/subway.csv")
display(df)