如何在Scala中将Spark的TableRDD转换为RDD [Array [Double]]?

时间:2014-06-13 13:08:02

标签: scala apache-spark shark-sql

我正在尝试对Shark执行Scala操作。我正在创建一个RDD,如下所示:

val tmp: shark.api.TableRDD = sc.sql2rdd("select duration from test")

我需要它将其转换为RDD[Array[Double]]。我试过了toArray,但它似乎没有效果。

我还尝试将其转换为Array[String],然后使用map进行转换,如下所示:

val tmp_2 = tmp.map(row => row.getString(0))
val tmp_3 = tmp_2.map { row => 
  val features = Array[Double] (row(0))
}

但是这给了我一个不能在函数中使用的Spark RDD[Unit]。还有其他方法可以继续进行此类型转换吗?

修改我也尝试使用toDouble,但这会为我提供RDD[Double]类型,而不是RDD[Array[Double]]

val tmp_5 = tmp_2.map(_.toDouble)

编辑2:

我设法做到如下:

数据样本:

296.98567000000003
230.84362999999999
212.89751000000001
914.02404000000001
305.55383

首先创建了Spark Table RDD。

val tmp = sc.sql2rdd("select duration from test")

我利用getString将其翻译为RDD[String],然后将其转换为RDD[Array[Double]]

val duration = tmp.map(row => Array[Double](row.getString(0).toDouble))

0 个答案:

没有答案