【问题标题】:Not able to cat dbfs file in databricks community edition cluster. FileNotFoundError: [Errno 2] No such file or directory:无法在 databricks 社区版集群中创建 dbfs 文件。 FileNotFoundError: [Errno 2] 没有这样的文件或目录:
【发布时间】:2020-12-12 14:45:10
【问题描述】:

尝试读取 databricks 社区版 集群中的增量日志文件。 (databricks-7.2 版本)

df=spark.range(100).toDF("id")
df.show()
df.repartition(1).write.mode("append").format("delta").save("/user/delta_test")

with open('/user/delta_test/_delta_log/00000000000000000000.json','r')  as f:
  for l in f:
    print(l)

Getting file not found error:

FileNotFoundError: [Errno 2] No such file or directory: '/user/delta_test/_delta_log/00000000000000000000.json'
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<command-1759925981994211> in <module>
----> 1 with open('/user/delta_test/_delta_log/00000000000000000000.json','r')  as f:
      2   for l in f:
      3     print(l)

FileNotFoundError: [Errno 2] No such file or directory: '/user/delta_test/_delta_log/00000000000000000000.json'

我尝试添加 /dbfs/,dbfs:/ 没有解决,仍然出现同样的错误。

with open('/dbfs/user/delta_test/_delta_log/00000000000000000000.json','r')  as f:
  for l in f:
    print(l)

但使用 dbutils.fs.head 我能够读取文件。

dbutils.fs.head("/user/delta_test/_delta_log/00000000000000000000.json")

'{"commitInfo":{"timestamp":1598224183331,"userId":"284520831744638","userName":"","operation":"WRITE","operationParameters":{"mode":"Append","partitionBy":"[]"},"notebook":{"","isolationLevel":"WriteSerializable","isBlindAppend":true,"operationMetrics":{"numFiles":"1","numOutputBytes":"1171","numOutputRows":"100"}}}\n{"protocol":{"minReaderVersi...etc

我们如何使用python open method 在databricks 中读取/捕获dbfs file?

【问题讨论】:

    标签: apache-spark pyspark databricks dbutils databricks-community-edition


    【解决方案1】:

    默认情况下,此数据位于 DBFS 上,您的代码需要了解如何访问它。 Python 不知道——这就是它失败的原因。

    但有一种解决方法 - DBFS 已安装到 /dbfs 的节点,因此您只需将其附加到您的文件名:而不是 /user/delta_test/_delta_log/00000000000000000000.json,使用 /dbfs/user/delta_test/_delta_log/00000000000000000000.json

    更新:在社区版中,在 DBR 7+ 中,此挂载已禁用。解决方法是使用dbutils.fs.cp 命令将文件从DBFS 复制到本地目录,例如/tmp 或/var/tmp,然后从中读取:

    dbutils.fs.cp("/file_on_dbfs", "file:///tmp/local_file")
    

    请注意,如果您不指定 URI 架构,则该文件默认引用 DBFS,并且要引用本地文件,您需要使用 file:// 前缀(参见 docs)。

    【讨论】:

    • 感谢@AlexOtt,我尝试过使用/dbfs 并使用python 打开文件api ..with open('/dbfs/user/delta_test/_delta_log/00000000000000000000.json','r') as f: for l in f: print(l) 仍然出现同样的错误.. 我需要手动 创建@ 987654332@在python方式使用前指向文件访问?
    • 看起来它取决于社区上的 DBR 版本 - 它适用于 DBR 6.6,但 /dbfs/ 在 DBR 7.2 上为空
    • 嗨,Alex,您能否详细说明如何通过dbutils.fs.cp 解决此问题?我尝试了以下方法:dbutils.fs.cp("databricks-datasets/README.md", "/tmp/README.md") --> 工作%fs ls /tmp/README.md --> 返回路径到"dbfs:/tmp/README.md" f = open("/tmp/README.md", "r") --> FileNotFoundError: [Errno 2] No such file or directory: '/tmp/README.md'
    • 我已将代码示例添加到答案中。默认情况下,如果您不指定架构,则所有引用都将转到 DBFS 文件。要使用本地文件,请使用file://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2019-11-03
    • 2021-08-24
    • 2021-03-07
    • 2015-06-09
    相关资源
    最近更新 更多