Scala 如何转换RDD<;字符串>;到RDD<;向量>;火花?
我有一个文件,每一行都是这样的Scala 如何转换RDD<;字符串>;到RDD<;向量>;火花?,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个文件,每一行都是这样的 info1,info2 info3,info4 ... 扫描后,我想运行k-means算法: val rawData = sc.textFile(myFile) val converted = convertToVector(rawData) val kmeans = new KMeans() kmeans.setK(10) kmeans.setRuns(10) kmeans.setEpsilon(1.0e-6) val model
info1,info2
info3,info4
...
扫描后,我想运行k-means算法:
val rawData = sc.textFile(myFile)
val converted = convertToVector(rawData)
val kmeans = new KMeans()
kmeans.setK(10)
kmeans.setRuns(10)
kmeans.setEpsilon(1.0e-6)
val model = kmeans.run(rawData) -> problem: k-means accepts only RDD<Vector>
对如何实现这一目标有何建议
提前感谢。考虑到输入文件的每一行都是由逗号分隔的字符串表示的假设向量,这是一个非常基本的操作 只需映射每个字符串entrie,在分隔符上拆分它,然后从中创建密集向量:
val parsedData = rawData.map(s => Vectors.dense(s.split(',').map(_.toDouble)))
谢谢,所以如果我想转换为RDD,我总是必须使用
向量。稠密的?除非你的向量实际上是稀疏的,并且你有一个稀疏的向量表示作为输入文件,否则你必须使用稠密的。这个映射(u.toDouble)
?IMHO,将字符串转换为双精度?考虑到信息[1-n]是数值,您可以直接将值转换为双精度。但这里似乎不是这样,是吗?这些信息是双倍的
val parsedData = rawData.map(s => Vectors.dense(s.split(',').map(_.toDouble)))