我正在开发一个项目,需要在 Python 中有效地对大型数据集进行排序。该数据集包含数百万条记录,我目前正在使用内置的
sorted()
函数。但是,我遇到了性能问题,并且排序过程花费了大量时间。
我已经研究过诸如
heapq
、numpy
和外部排序算法之类的替代方案,但考虑到数据集的大小,我不确定最佳方法。
有人可以提供 Python 中用于处理大型数据集的有效排序技术的建议或示例吗?此外,任何有关在排序过程中优化内存使用的见解都将非常有用
如果您使用内置函数,则意味着您的数据适合内存。
在不知道数据或是否可以处理数据以加速排序的情况下,我想说您可以使用并行过程来提高对极大数据集进行排序时的性能。
下面,有一种使用内置 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