如何使用sql Context将DataFrame转换为RDD

时间:2016-12-05 21:26:27

标签: apache-spark

我创建了数据框以使用sqlContext读取csv文件,我需要将表的一列转换为RDD,然后使用密集的Vector来执行矩阵乘法。 我发现很难这样做。

val df = sqlContext.read
  .format("com.databricks.spark.csv")
  .option("header","true")
  .option("inferSchema","true")
  .load("/home/project/SparkRead/train.csv")

val result1 = sqlContext.sql("SELECT Sales from train").rdd

如何将其转换为密集矢量?

1 个答案:

答案 0 :(得分:0)

您可以使用DataframeVector转换为VectorAssembler。看看下面的代码:

val df = spark.read.
  format("com.databricks.spark.csv").
  option("header","true").
  option("inferSchema","true").
  load("/tmp/train.csv")

// assuming input
// a,b,c,d
// 1,2,3,4
// 1,1,2,3
// 1,3,4,5

import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors

val assembler = new VectorAssembler().
    setInputCols(Array("a", "b", "c", "d")).
    setOutputCol("vect")

val output = assembler.transform(df)

// show the result
output.show()

// +---+---+---+---+-----------------+
// |  a|  b|  c|  d|             vect|
// +---+---+---+---+-----------------+
// |  1|  2|  3|  4|[1.0,2.0,3.0,4.0]|
// |  1|  1|  2|  3|[1.0,1.0,2.0,3.0]|
// |  1|  3|  4|  5|[1.0,3.0,4.0,5.0]|
// +---+---+---+---+-----------------+