2016-05-09 147 views
-1

我想要更好地將Dataframe轉換爲RDD。現在我正在將數據幀轉換爲集合和循環集合以準備RDD。但我們知道循環不是好的做法。在斯卡拉轉換火花數據幀到RDD

val randomProduct = scala.collection.mutable.MutableList[Product]() 
    val results = hiveContext.sql("select id,value from details"); 
    val collection = results.collect();  
    var i = 0; 
    results.collect.foreach(t => { 
     val product = new Product(collection(i)(0).asInstanceOf[Long], collection(i)(1).asInstanceOf[String]); 
     i = i+ 1; 
     randomProduct += product 
    }) 

    randomProduct 
    //returns RDD[Product] 

請建議我做這適用於大數據量的標準是穩定&格式。

+0

第一筆鉅額的數據和收集的不是很好的朋友,其次,爲什麼?你在做什麼:「轉換+ ???」? – eliasah

+0

謝謝eliasah。我需要RDD [Product],我將用它來對此應用一些規則。 –

回答

2
val results = hiveContext.sql("select id,value from details"); 
results.rdd.map(row => new Product(row.getLong(0), row.getString(1))) // RDD[Product] 
+0

謝謝你的回答。現在它正在重新調整'org.apache.spark.rdd.RDD [com.cloudera.mypacl.Product],但需要的是 scala.collection.mutable.MutableList [com.cloudera.mypack.Product]'有沒有辦法讓我們可以將它轉換爲'scala.collection.mutable.MutableList [com.cloudera.mypack.Product]' –

+0

你不想這樣做。可變列表是本地內存中的結構,不適合大量數據。如果這會很大,你想保留它作爲一個RDD。 –

+0

謝謝史蒂夫。你是對的。現在我可以在不轉換的情況下使用RDD。 –