Azure Databricks命令在处理大型文件时卡住。纯Python。(2.5gb+;文件大小)
我正在使用纯Python将txt文件转换为XML格式。我有一个从1kb到2.5Gb的txt格式的文件列表。转换时,大小将增长约5倍 问题是,在处理较大的2.5Gb文件时,第一个文件可以工作,但后续处理会挂起并卡住Azure Databricks命令在处理大型文件时卡住。纯Python。(2.5gb+;文件大小),python,azure,databricks,azure-databricks,Python,Azure,Databricks,Azure Databricks,我正在使用纯Python将txt文件转换为XML格式。我有一个从1kb到2.5Gb的txt格式的文件列表。转换时,大小将增长约5倍 问题是,在处理较大的2.5Gb文件时,第一个文件可以工作,但后续处理会挂起并卡住运行命令..。较小的文件似乎可以正常工作 我对代码进行了编辑,以确保它使用生成器,而不是在内存中保留大列表 我正在从dbfs进行处理,所以连接不应该是问题 进行内存检查表明,它始终只使用约200Mb的内存,并且大小不会增长 处理大型文件大约需要10分钟 日志中没有GC警告或其他
运行命令..
。较小的文件似乎可以正常工作
- 我对代码进行了编辑,以确保它使用生成器,而不是在内存中保留大列表
- 我正在从
进行处理,所以连接不应该是问题dbfs
- 进行内存检查表明,它始终只使用约200Mb的内存,并且大小不会增长
- 处理大型文件大约需要10分钟
- 日志中没有GC警告或其他错误
- Azure Databricks,纯Python
- 集群足够大,并且只使用Python,所以这不应该成为问题
- 重启集群是唯一能让事情恢复正常的方法
- 卡住的命令还会导致群集上的其他笔记本无法工作
# list of files to convert that are in Azure Blob Storage
text_files = ['file1.txt','file2.txt','file3.txt']
# loop over files and convert them to xml
for file in text_files:
xml_filename = file.replace('.txt','.xml')
# copy files from blob storage to dbfs
dbutils.fs.cp(f'dbfs:/mnt/storage_account/projects/xml_converter/input/{file}',f'dbfs:/tmp/temporary/{file}')
# open files and convert to xml
with open(f'/dbfs/tmp/temporary/{file}','r') as infile, open(f'/dbfs/tmp/temporary/{xml_filename}','a', encoding="utf-8") as outfile:
# list of strings to join at write time
to_write = []
for line in infile:
# convert to xml
# code redacted for simplicity
to_write.append(new_xml)
# batch the write operations to avoid huge lists
if len(to_write) > 10_000:
outfile.write(''.join(to_write))
to_write = [] # reset the batch
# do a final write of anything that is in the list
outfile.write(''.join(to_write))
# move completed files from dbfs to blob storage
dbutils.fs.cp(f'dbfs:/tmp/temporary/{xml_filename}',f"/mnt/storage_account/projects/xml_converter/output/{xml_filename}")
Azure群集信息
我希望这段代码运行时不会出现任何问题。记忆似乎不是问题。数据是dbfs格式的,因此它不是blob问题。它使用的是发电机,所以内存中没有多少。我不知所措。如有任何建议,将不胜感激。谢谢你的关注 我现在也遇到了这个问题。正在尝试从装载的数据池读取数据。显然,无法在数据块中正确读取大于2GB(最大32位整数)的文件。我已尝试按指定方式装入文件夹,但没有效果。也许你会有更好的运气!