1

我正在尝试读取一个小的 txt 文件,该文件作为表格添加到 Databricks 上的默认数据库中。尝试通过 Local File API 读取文件时,我得到一个FileNotFoundError,但我可以使用SparkContext读取与Spark RDD相同的文件。

请在下面找到代码:

with open("/FileStore/tables/boringwords.txt", "r") as f_read:
  for line in f_read:
    print(line)

这给了我错误:

FileNotFoundError                         Traceback (most recent call last)
<command-2618449717515592> in <module>
----> 1 with open("dbfs:/FileStore/tables/boringwords.txt", "r") as f_read:
      2   for line in f_read:
      3     print(line)

FileNotFoundError: [Errno 2] No such file or directory: 'dbfs:/FileStore/tables/boringwords.txt'

其中,我使用SparkContext读取文件没有问题:

boring_words = sc.textFile("/FileStore/tables/boringwords.txt")
set(i.strip() for i in boring_words.collect())

正如预期的那样,我得到了上述代码块的结果:

Out[4]: {'mad',
 'mobile',
 'filename',
 'circle',
 'cookies',
 'immigration',
 'anticipated',
 'editorials',
 'review'}

我还参考了此处的DBFS 文档以了解本地文件 API 的限制,但在此问题上没有任何线索。任何帮助将不胜感激。谢谢!

4

3 回答 3

1

问题是您使用的open功能仅适用于本地文件,并且对 DBFS 或其他文件系统一无所知。要使其正常工作,您需要使用DBFS 本地文件 API并将/dbfs前缀附加到文件路径/dbfs/FileStore/....::

with open("/dbfs/FileStore/tables/boringwords.txt", "r") as f_read:
  for line in f_read:
    print(line)
于 2021-11-24T07:56:14.450 回答
0

或者我们可以使用dbutils

files = dbutils.fs.ls('/FileStore/tables/')
li = []
for fi in files: 
  print(fi.path)

例子 ,

在此处输入图像描述

于 2021-11-24T18:26:17.383 回答
0

或者,您可以简单地使用内置的 csv 方法:

df = spark.read.csv("dbfs:/FileStore/tables/boringwords.txt")
于 2021-11-24T08:51:27.857 回答