如何在Python中高效地对大型数据集进行排序?

问题描述 投票:0回答:1

我正在开发一个项目,需要在 Python 中有效地对大型数据集进行排序。该数据集包含数百万条记录,我目前正在使用内置的

sorted()
函数。但是,我遇到了性能问题,并且排序过程花费了大量时间。

我已经研究过诸如

heapq
numpy
和外部排序算法之类的替代方案,但考虑到数据集的大小,我不确定最佳方法。

有人可以提供 Python 中用于处理大型数据集的有效排序技术的建议或示例吗?此外,任何有关在排序过程中优化内存使用的见解都将非常有用

python algorithm performance sorting data-structures
1个回答
0
投票

如果您使用内置函数,则意味着您的数据适合内存。

在不知道数据或是否可以处理数据以加速排序的情况下,我想说您可以使用并行过程来提高对极大数据集进行排序时的性能。

下面,有一种使用内置 Python 包进行并行排序的方法:

import os
from multiprocessing import Pool
from random import sample
import heapq


def sort_chunk(chunk):
    return sorted(chunk)


def chunked_list(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i:i + n]


def parallel_sort(lst, num_processes=None):
    if num_processes is None:
        num_processes = os.cpu_count() or 1

    chunk_size = len(lst) // num_processes
    chunks = list(chunked_list(lst, chunk_size))

    with Pool(processes=num_processes) as pool:
        sorted_chunks = pool.map(sort_chunk, chunks)

    return list(heapq.merge(*sorted_chunks))


if __name__ == '__main__':
    large_list = sample(range(1000000), 100000)
    sorted_list = parallel_sort(large_list)
    print(sorted_list[:10]) # If you would like to see all the output remove the array slice
© www.soinside.com 2019 - 2024. All rights reserved.