首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Databricks ADLS挂载点读取文件为字节字符串

从Databricks ADLS挂载点读取文件为字节字符串
EN

Stack Overflow用户
提问于 2021-11-17 13:04:26
回答 2查看 1.3K关注 0票数 1

目标是从ADLS挂载点将一个文件读入Databricks中的字节字符串

确定ADLS安装点

首先,使用dbutils.fs.mounts()确认了以下内容:

... MountInfo(mountPoint='/mnt/ftd', source='abfss://ftd@omitted.dfs.core.windows.net/', encryptionType=''), ...

确认文件的存在

所讨论的文件名为TruthTable.csv,已使用以下命令确认其下落:

dbutils.fs.ls('/mnt/ftd/TruthTable.csv')

返回:

[FileInfo(path='dbfs:/mnt/ftd/TruthTable.csv', name='TruthTable.csv', size=156)]

确认文件的可读性

要确认文件是否可以读取,我们可以运行以下代码段。

代码语言:javascript
复制
filePath = '/mnt/ftd/TruthTable.csv'
spark.read.format('csv').option('header','true').load(filePath)

成功返回

DataFrame[p: string, q: string, r: string, s: string]

问题所在

由于目标是能够以字节字符串的形式读取文件,下面的代码段应该是成功的,但是它不是。

代码语言:javascript
复制
filePath = '/mnt/ftd/TruthTable.csv'
with open(filePath, 'rb') as fin:
  contents = fin.read()
  print(contents)

执行以下代码段输出:

FileNotFoundError: [Errno 2] No such file or directory: '/mnt/ftd/TruthTable.csv'

Databricks团队在以下链接https://docs.databricks.com/data/databricks-file-system.html#local-file-apis上提供的文档仅适用于在/tmp/文件夹中找到的文件,但是,要求是直接从挂载点读取文件。

EN

回答 2

Stack Overflow用户

发布于 2021-11-17 13:20:55

请添加dbfs前缀:

代码语言:javascript
复制
filePath = '/dbfs/mnt/ftd/TruthTable.csv'
with open(filePath, 'rb') as fin:
  contents = fin.read()
  print(contents)

对于本机databricks函数(如dbutils),dbfs用作默认位置。当直接访问文件系统时,需要添加/dbfs,这是默认的挂载目录。或者,您可以使用'dbfs:/mnt/ftd/TruthTable.csv‘。如果您使用免费的社区版本,它将根本无法工作,因为没有对底层文件系统的访问。对于Azure,Aws和Google版本来说,这应该是可行的。

票数 0
EN

Stack Overflow用户

发布于 2022-09-16 20:54:41

我能够通过将s3a://和桶前缀替换为相应的/dbfs/mnt/ one来读取文件。

s3a://s3-bucket/lake/output/dept/2022/09/16/20220916_1643_764250.csv /dbfs/mnt/output/dept/2022/09/16/20220916_1643_764250.csv

我用这个:

代码语言:javascript
复制
_path = _path.replace('s3a://s3-bucket/lake', '/dbfs/mnt')

希望能帮上忙。

-ed

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70004930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档