我知道有幾個問題已經提出了類似的主題,但我無法對我的問題應用任何答案,也想知道最佳實踐。將數據集從SQL轉換爲RDD [矢量]
我已經將ML的日期集加載到SQL數據庫。我想根據它應用mllib的聚類功能。我已經使用sqlContext
將SQL數據庫加載到DataFrame
,刪除了不相關的列。然後發生問題的部分,我通過解析DataFrame的每一行來創建一個向量。 然後使用toJavaRDD
函數將矢量轉換爲RDD。
下面是代碼(作品):
val usersDF = sqlContext.read.format("jdbc").option("url","jdbc:mysql://localhost/database").
option("driver","com.mysql.jdbc.Driver").option("dbtable","table").
option("user","woot").option("password","woot-password").load()
val cleanDF = usersDF.drop("id").drop("username")
cleanDF.show()
val parsedData = cleanDF.map(s => Vectors.dense(s.toString().replaceAll("[\\[\\]]", "").trim.split(',').map(_.toDouble))).cache()
val splits = parsedData.randomSplit(Array(0.6,0.4), seed = 11L)
val train_set = splits(0).cache()
val gmm = new GaussianMixture().setK(2).run(train_set)
我的主要問題問候我的火花文檔閱讀:Local vector,在我的理解數據幀映射將在工人執行,以後會在創建Vector時發送給驅動程序(是否是本地向量的含義)才能稍後再次發送給工人?有沒有更好的方法來實現這一目標?
另一件事是,將SQL加載到DataFrame中僅將其轉換爲字符串並再次解析它似乎有點奇怪。有沒有其他的最佳實踐建議?