2016-05-09 151 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。 –