我有一列短句的星星之火数据,还有一个带有范畴变量的列。我想在句子上执行tf-idf,在分类变量上执行one-hot-encoding,然后一旦它变得更小,就输出到驱动程序上的稀疏矩阵(对于一个scikit-learn模型)。
以稀疏的形式从火花中获取数据的最佳方法是什么?在稀疏向量上似乎只有一个toArray()方法,它输出numpy数组。然而,文档中确实有这样的说法: say稀疏数组可用于火花稀疏阵列。。
还请记住,tf_idf值实际上是稀疏数组的一列。理想情况下,最好将所有这些特性放到一个大型稀疏矩阵中。
发布于 2016-11-11 23:59:01
一种可能的解决办法可以表述如下:
RDD并提取矢量:
从pyspark.ml.linalg导入SparseVector从操作符导入吸引剂df = sc.parallelize([ (SparseVector(3,0,2,1.0,3.0),),(SparseVector(3,1,4.0),)].toDF(“特性”)SparseVector=df.rdd.map(“特性”)(i, j, value)的平坦到RDD:
def yield (行):vec,i=zip中j,v的行(vec.indices,vec.values):产量i,j,v条目=indexed_features.flatMap(爆炸)另一个:
features的每一行转换为矩阵:
导入np as_matrix(vec):数据,索引= vec.values,vec.indices形状= 1,vec.size返回csr_matrix((数据,索引,np.array(0,vec.values.size)),形状) mats = features.map(as_matrix)vstack减少:
从scipy.sparse导入vstack = mats.reduce(lambda,y: v堆栈( x,y))
或者collect和vstack
mat =v堆栈(mats.collect())https://stackoverflow.com/questions/40557577
复制相似问题