我使用sc.textFile()从Mahout中的Alluxio获取数据,但它是spark RDD。我的程序进一步使用这个spark RDD作为Mahout DRM,因此我需要将RDD转换为DRM。所以我目前的代码保持稳定。
答案 0 :(得分:2)
可以通过以下步骤从Apache Spark RDD创建Apache Mahout DRM:
(Long, Vector)
请考虑以下示例代码:
val rddA = sc.parallelize(Array((1.0, 2.0, 3.0),
( 2.0, 3.0, 4.0),
( 4.0, 5.0, 6.0)))
val drmRddA: DrmRdd[Long] = rddA.map(a => new DenseVector(a))
.zipWithIndex()
.map(t => (t._2, t._1))
val drmA = drmWrap(rdd= drmRddA)
来源/更多信息/无耻的自我推销(底部):my Blog
答案 1 :(得分:1)
转换数据的主要问题通常是Mahout使用整数来引用一般矩阵的行号和列号,但数据通常有自己的行和列键,这些键是某种字符串ID。
Mahout有一个名为IndexedDatasetSpark
的对象,该对象会在BiMaps
(实际为BiDictionaries
)中保留ID,但也会创建一个Mahout DRM。好处是字典会在数学完成后将行和列的整数转换回ID。
如果你有一个矩阵元素的RDD [String,String],那么这将进行转换。如果您有一组行,您可以从此开始编码您自己的转换。