如何解决内核错误或内存错误?

时间:2019-03-01 09:58:25

标签: python pandas numpy apache-spark dask-distributed

我有一个长度为50000的字符串数组。我试图创建一个尺寸为50000 * 500000的相似矩阵。为了使之相似,我尝试使用以下代码形成元组列表:

terms = [element for element in itertools.product(array1,array1)]

但是我遇到内存错误或内核错误。它无法前进。

我也在堆栈溢出中关注了这个问题: Spark Unique pair in cartesian product 这与我计算距离的实现非常相似(由于对称性,我可以使用矩阵中的上三角或下三角)。是否有任何方法可以通过spark或任何其他使用分区的方法或其他方式来完成它。任何想法将不胜感激。

小型阵列的玩具示例:

array1 = np.array(['hello', 'world', 'thankyou'])
terms = [element for element in itertools.product(array1,array1)]

术语输出:

[('hello', 'hello'),
 ('hello', 'world'),
 ('hello', 'thankyou'),
 ('world', 'hello'),
 ('world', 'world'),
 ('world', 'thankyou'),
 ('thankyou', 'hello'),
 ('thankyou', 'world'),
 ('thankyou', 'thankyou')]

1 个答案:

答案 0 :(得分:2)

50000 * 50000是列表中的2GB +元素。每个列表元素占用4个字节(该列表+36字节的开销)。将其乘以平均字符串长度(示例中为6)+ 21(每个字符串的字节开销数)。这意味着仅此一条语句就需要有216+ GB的RAM(这是OS,其他程序等的内存之上)。我认为您遇到了现实世界的限制,需要找到更好的算法。