将文本文件从Databricks追加到Azure ADLS Gen1

3

我想将一种类似日志的文件写回到Azure ADLS Gen1中。

我可以使用以下方式进行写入(而不是追加):

dbutils.fs.put(filename,"random text")

但我无法使用以下方式追加它:
with open("/dbfs/mnt/filename.txt","a"):
f.write("random text")

它给我报错了。

1 with  open("/dbfs/mnt/filename.txt", "a") as f:
----> 2   f.write("append values")

OSError: [Errno 95] Operation not supported

另外,我尝试使用 logger.basicconfig(logging.basicConfig(filename='dbfs:/mnt/filename.txt', filemode='w')

但是似乎没有写入路径。 有人可以帮忙吗?

3个回答

2

只追加('a'):打开文件以进行写入。如果文件不存在,则创建文件。句柄定位于文件末尾。正在写入的数据将在现有数据之后插入到末尾。

file = open("myfile.txt","a")#append mode 
file.write("Today \n") 

在此输入图片描述

追加文件的输出结果:

在此输入图片描述


如果这对您有用,您可以将其接受为答案吗?这可能会帮助更多遇到类似问题的人。 - CHEEKATLAPRADEEP
你能展示一下文件内容的截图吗?我认为这可以确认它是否已经被追加了。 - iratelilkid
1
@iratelilkid,请查看文件内容的截图。 - CHEEKATLAPRADEEP
这并没有帮助,如果在Databricks中尝试向现有文件追加新行,则仍会出现OSError:[Errno 95]操作不受支持的错误。 - Carlo

1

0
我遇到了同样的问题。原来在Databricks上不能使用标准的Python文件操作,因为有一个文件系统(DBFS)。你最终会得到错误[Errno 95]操作不支持。你必须使用dbutils来完成,并且我发现你不能追加。下面的代码是我解决这个问题的方法。请注意,在使用dbutils.fs操作时,需要使用dbfs:/文件路径。
dbfs_path_home = "dbfs:/mnt/directory
dbfs_path_log = f"{dbfs_path_home}/logfile.log"

当你想要记录一些内容时,你需要读取整个日志文件的内容并添加新的消息。例如:
def logging(message):
    logmsg = dbutils.fs.head(dbfs_path_log)
    logmsg += message + '\n'
    dbutils.fs.put(dbfs_path_log, logmsg, overwrite=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接