簡體   English   中英

每行將兩個不同的RDD合並為一個-Scala

[英]Join per line two different RDDs in just one - Scala

我正在Spark-Scala中編寫K-means算法。 我的模型預測每個點在哪個群集中。

數據

-6.59 -44.68
-35.73 39.93
47.54 -52.04
23.78 46.82
....

加載數據

val data = sc.textFile("/home/borja/flink/kmeans/points")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

使用KMeans將數據分為兩類

val numClusters = 10
val numIterations = 100
val clusters = KMeans.train(parsedData, numClusters, numIterations)

預測

val prediction = clusters.predict(parsedData)

但是,我需要將結果和點以以下格式放入同一文件中:

[no title, numberOfCluster (1,2,3,..10), pointX, pointY]:
    6 -6.59 -44.68
    8 -35.73 39.93
    10 47.54 -52.04
    7 23.78 46.82

這是Python中此可執行文件的條目,以打印出非常好的結果。

但我最大的努力就是這樣:(您可以檢查第一個數字是否正確:68、384,...)

var i = 0
val c = sc.parallelize(data.collect().map(x => {
    val tuple = (i, x)
    i += 1
    tuple
}))
i = 0
val c2 = sc.parallelize(prediction.collect().map(x => {
    val tuple = (i, x)
    i += 1
    tuple
}))
val result = c.join(c2)

result.take(5)

結果:

res94: Array[(Int, (String, Int))] = Array((68,(17.79 13.69,0)), (384,(-33.47 -4.87,8)), (440,(-4.75 -42.21,1)), (4,(-33.31 -13.11,6)), (324,(-39.04 -16.68,6)))

謝謝你的幫助! :)

我沒有一個易於測試的Spark集群,但是這樣的事情應該可以工作:

val result = parsedData.map { v =>
  val cluster = clusters.predict(v)
  s"$cluster ${v(0)} ${v(1)}"
}
result.saveAsTextFile("/some/output/path")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM