Azure Databricks命令在处理大型文件时卡住。纯Python。(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警告或其他

我正在使用纯Python将txt文件转换为XML格式。我有一个从1kb到2.5Gb的txt格式的文件列表。转换时,大小将增长约5倍

问题是,在处理较大的2.5Gb文件时,第一个文件可以工作,但后续处理会挂起并卡住
运行命令..
。较小的文件似乎可以正常工作

  • 我对代码进行了编辑,以确保它使用生成器,而不是在内存中保留大列表

  • 我正在从
    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位整数)的文件。我已尝试按指定方式装入文件夹,但没有效果。也许你会有更好的运气!