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