高效加载CSV坐标格式(COO)输入到局部矩阵spark
Efficient load CSV coordinate format (COO) input to local matrix spark
我想将 CSV 坐标格式 (COO) 数据转换为局部矩阵。目前我首先将它们转换为 CoordinateMatrix
,然后再转换为 LocalMatrix
。但是有更好的方法吗?
示例数据:
0,5,5.486978435
0,3,0.438472867
0,0,6.128832321
0,7,5.295923198
0,1,7.738270234
代码:
var loadG = sqlContext.read.option("header", "false").csv("file.csv").rdd.map("mapfunctionCreatingMatrixEntryOutOfRow")
var G = new CoordinateMatrix(loadG)
var matrixG = G.toBlockMatrix().toLocalMatrix()
A LocalMatrix
将存储在一台机器上,因此不会利用 Spark 的优势。换句话说,使用 Spark 似乎有点浪费,尽管仍然是可能的。
将 CSV 文件转换为 LocalMatrix
的最简单方法是首先使用 Scala 而不是 Spark 读取 CSV:
val entries = Source.fromFile("data.csv").getLines()
.map(_.split(","))
.map(a => (a(0).toInt, a(1).toInt, a(2).toDouble))
.toSeq
LocalMatrix
的 SparseMatrix
变体具有读取 COO 格式数据的方法。需要指定行数和列数才能使用它。由于矩阵是稀疏的,这在大多数情况下应该手动完成,但可以按如下方式获得数据中的最高值:
val numRows = entries.map(_._1).max + 1
val numCols = entries.map(_._2).max + 1
然后创建矩阵:
val matrixG = SparseMatrix.fromCOO(numRows, numCols, entries)
矩阵将以 CSC 格式存储在机器上。打印上面的示例输入将产生以下输出:
1 x 8 CSCMatrix
(0,0) 6.128832321
(0,1) 7.738270234
(0,3) 0.438472867
(0,5) 5.486978435
(0,7) 5.295923198
我想将 CSV 坐标格式 (COO) 数据转换为局部矩阵。目前我首先将它们转换为 CoordinateMatrix
,然后再转换为 LocalMatrix
。但是有更好的方法吗?
示例数据:
0,5,5.486978435
0,3,0.438472867
0,0,6.128832321
0,7,5.295923198
0,1,7.738270234
代码:
var loadG = sqlContext.read.option("header", "false").csv("file.csv").rdd.map("mapfunctionCreatingMatrixEntryOutOfRow")
var G = new CoordinateMatrix(loadG)
var matrixG = G.toBlockMatrix().toLocalMatrix()
A LocalMatrix
将存储在一台机器上,因此不会利用 Spark 的优势。换句话说,使用 Spark 似乎有点浪费,尽管仍然是可能的。
将 CSV 文件转换为 LocalMatrix
的最简单方法是首先使用 Scala 而不是 Spark 读取 CSV:
val entries = Source.fromFile("data.csv").getLines()
.map(_.split(","))
.map(a => (a(0).toInt, a(1).toInt, a(2).toDouble))
.toSeq
LocalMatrix
的 SparseMatrix
变体具有读取 COO 格式数据的方法。需要指定行数和列数才能使用它。由于矩阵是稀疏的,这在大多数情况下应该手动完成,但可以按如下方式获得数据中的最高值:
val numRows = entries.map(_._1).max + 1
val numCols = entries.map(_._2).max + 1
然后创建矩阵:
val matrixG = SparseMatrix.fromCOO(numRows, numCols, entries)
矩阵将以 CSC 格式存储在机器上。打印上面的示例输入将产生以下输出:
1 x 8 CSCMatrix
(0,0) 6.128832321
(0,1) 7.738270234
(0,3) 0.438472867
(0,5) 5.486978435
(0,7) 5.295923198