Azure Synapse Analytics 的文档提到了两种使用 Synapse Analytics 中的 Apache Spark 池将数据读/写到 Azure Data Lake Storage Gen2 的方法。
adls_path = "abfss://<containername>@<accountname>.dfs.core.windows.net/<filepath>"
df = spark.read.format("csv").load(adls_path)
mssparkutils.fs.mount(
"abfss://<containername>@<accountname>.dfs.core.windows.net",
"/data",
{"linkedService":"<accountname>"}
)
synfs_path = "synfs:/<jobid>/data/<filepath>"
df = spark.read.format("csv").load(synfs_path)
这两种方法有什么区别?您应该什么时候更喜欢使用挂载点?
这两种方法的主要区别在于 Apache Spark 池如何访问和管理数据。
当您直接使用ADLS存储路径读取数据时,直接从存储帐户访问数据,无需任何中间缓存或处理。当您需要访问存储在与 Synapse Analytics 工作区关联的帐户或容器不同的帐户或容器中的数据时,或者当您需要对 Synapse 文件系统 (synfs) 不支持的数据执行操作时,此方法适用).
另一方面,当您使用挂载点时,您创建了一个映射到 ADLS 存储帐户的虚拟文件系统。这允许您使用 synfs 路径访问数据,就好像它存储在本地 Synapse 工作区中一样。使用挂载点的优势在于您可以利用 Synapse 文件系统功能(例如元数据管理、缓存和访问控制)来优化数据处理并提高性能。
一般来说,当需要对同一份数据进行频繁的读写操作,或者需要访问多个Spark pools或jobs的数据时,应该更倾向于使用mount point。这使您可以利用 Synapse 文件系统的缓存和性能优化功能。但是,如果你只需要访问一次数据或者进行简单的操作,直接使用ADLS存储路径读取数据可能会更方便