小编Aat*_*atG的帖子

使用stl排序将表排序到位

我有一个巨大的表(约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的例子假设被比较的每个项目是一个类的单个实例; 这里每个项目由不同数组中的三个值表示.

c++ sorting algorithm stl

8
推荐指数
1
解决办法
1001
查看次数

Parquet读取时内存不足

我试图乘以以镶木地板格式存储的大矩阵,所以小心不要将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)

mapreduce bigdata apache-spark parquet

8
推荐指数
0
解决办法
1326
查看次数

尝试使用scipy.misc.imsave将numpy数组保存为图像时出现溢出错误

我正在尝试查看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)

numpy scipy python-imaging-library

5
推荐指数
0
解决办法
640
查看次数

如何在vim中删除下一个字符(不是当前的!)?

我经常发现自己需要删除光标后的字符,而不是当前字符.在vim中以正常模式执行此操作的最短方法是什么?

vim

5
推荐指数
1
解决办法
1810
查看次数