2016-05-30 96 views
0

我正在用scala編寫的spark項目中的MySQL數據庫中讀取一個表。這是我的第一週,所以我真的不適合。當我試圖運行Scala Spark類型錯配找到單元,需要rdd.RDD

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

我得到了parsedData一個錯誤,指出:「類型不匹配;發現:org.apache.spark.rdd.RDD [地圖[字符串,任何]要求:組織。 apache.spark.rdd.RDD [org.apache.spark.mllib.linalg.Vector]」

我的解析的數據被上面創建這樣的:

val parsedData = dataframe_mysql.map(_.getValuesMap[Any](List("name", "event","execution","info"))).collect().foreach(println) 

其中dataframe_mysql是無論是從sqlcontext.read.format("jdbc").option(....) function.返回

我該如何將我的單位轉換爲符合要求才能通過火車功能?

根據文件,我應該使用這樣的事情:

data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache() 

我應該改變我的價值觀翻番?因爲當我嘗試運行上面的命令時,我的項目會崩潰。

謝謝!

回答

1

刪除尾部.collect().foreach(println)。撥打collect之後,您不再擁有RDD - 它只會變成本地收藏。

隨後,當您撥打foreach時,它會返回Unit - foreach用於執行諸如打印集合中每個元素的副作用。等等。

+0

是的!我這樣做,但它不匹配沒有它: 類型不匹配;找到:org.apache.spark.rdd.RDD [Map [String,Any]] required:org.apache.spark.rdd.RDD [org.apache.spark.mllib.linalg.Vector] – Kratos

+0

對於KMeans,您需要把你的所有功能變成雙打,並創建一個矢量。 MLLib指南中的示例按「」分割,因爲輸入由空格分隔,並且它們是使用map(_。toDouble)轉換的數值。 –

相關問題