我有一个巨大的表(约50Gb)(i,j,k)格式(来自稀疏矩阵)存储为
uint32_t * idx1, * idx2;
float * vals;
uint32_t tablesize;
Run Code Online (Sandbox Code Playgroud)
并且我想用给定的比较函数对它进行排序,该函数是idx1和idx2的函数.可以使用std :: sort来完成吗?
具体地,通过将i放置在idx2中的idx1,j和v中的相应条目中的v来存储稀疏矩阵中具有值v的每个非零条目(i,j).我想根据(i1,j1,v1)<=(i2,j2,v2)对这些条目进行排序,如果
(i1 < i2) || (i1==i2 && j1 <= j2)
Run Code Online (Sandbox Code Playgroud)
我已经能够在非标准数据类型上使用std :: sort的例子假设被比较的每个项目是一个类的单个实例; 这里每个项目由不同数组中的三个值表示.
我试图乘以以镶木地板格式存储的大矩阵,所以小心不要将RDD存储在内存中,但是从镶木地板阅读器中得到OOM错误:
15/12/06 05:23:36 WARN TaskSetManager: Lost task 950.0 in stage 4.0
(TID 28398, 172.31.34.233): java.lang.OutOfMemoryError: Java heap space
at org.apache.parquet.hadoop.ParquetFileReader$ConsecutiveChunkList.readAll(ParquetFileReader.java:755)
at org.apache.parquet.hadoop.ParquetFileReader.readNextRowGroup(ParquetFileReader.java:494)
at org.apache.parquet.hadoop.InternalParquetRecordReader.checkRead(InternalParquetRecordReader.java:127)
at org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:208)
at org.apache.parquet.hadoop.ParquetRecordReader.nextKeyValue(ParquetRecordReader.java:201)
...
Run Code Online (Sandbox Code Playgroud)
具体来说,矩阵是一个46752×54843120的32位浮点密集矩阵,以镶木地板格式存储(每行约为1.7GB未压缩).
下面的代码将此矩阵作为Spark IndexedRowMatrix加载并将其乘以随机向量(行与关联的字符串标签一起存储,并且浮点数必须转换为双精度,因为IndexedRows只能使用双精度数):
val rows = {
sqlContext.read.parquet(datafname).rdd.map {
case SQLRow(rowname: String, values: WrappedArray[Float]) =>
// DenseVectors have to be doubles
val vector = new DenseVector(values.toArray.map(v => v.toDouble))
new IndexedRow(indexLUT(rowname), vector)
}
}
val nrows : Long = 46752
val ncols = 54843120
val A = new IndexedRowMatrix(rows, nrows, ncols)
A.rows.unpersist() …Run Code Online (Sandbox Code Playgroud) 我正在尝试查看71290x71290的numpy.float32s 数组.当我尝试使用matplotlib以交互方式查看它时,我的计算机内存不足,因此我尝试将其保存为图像文件并在ipython之外查看.以下内容应该有效,请阅读其他SO帖子:
import numpy as np
W = np.zeros((71290, 71290), dtype='float32')
from scipy.misc import imsave
imsave('test.png', W)
Run Code Online (Sandbox Code Playgroud)
但最后一行给了我一个溢出错误:
OverflowError:大小不适合int
这是完整的堆栈跟踪:
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
/home/agittens/Documents/langmodel/<ipython-input-4-bf9f2254f869> in <module>()
----> 1 imsave('test.png', W)
/usr/local/lib/python2.7/dist-packages/scipy/misc/pilutil.pyc in imsave(name, arr)
160
161 """
--> 162 im = toimage(arr)
163 im.save(name)
164 return
/usr/local/lib/python2.7/dist-packages/scipy/misc/pilutil.pyc in toimage(arr, high, low, cmin, cmax, pal, mode, channel_axis)
235 if mode in [None, 'L', 'P']:
236 bytedata = bytescale(data,high=high,low=low,cmin=cmin,cmax=cmax)
--> 237 image = Image.frombytes('L',shape,bytedata.tostring())
238 if …Run Code Online (Sandbox Code Playgroud)