在Spark中将数据框列转换为向量

时间:2018-11-09 02:59:54

标签: scala apache-spark apache-spark-ml

我是新手,正在尝试使用某些MLlib函数来帮助我进行学校项目。所有有关如何使用MLlib进行分析的文档似乎都使用了向量,我想知道是否可以仅对数据帧配置我想做的事情,而不是在spark中配置向量。

例如,在scala的执行PCA的文档中是:

"val data = Array(
Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),
Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0))
val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
val pca = new PCA().fit(df)"

etc ....为此的是在这里:https://spark.apache.org/docs/latest/ml-features.html#pca

有没有一种方法不必创建这些向量,只需将其配置为我已经创建的数据帧即可。我已经创建的数据框有50多个列和15,000多个行,因此为每列创建向量确实不可行。 有没有人有任何想法或建议。最后,不幸的是,对于我的项目,我仅限于在Scala中使用Spark,不允许使用Pyspark,Java for Spark或SparkR。 如果不清楚,请告诉我。 谢谢!

1 个答案:

答案 0 :(得分:1)

您要寻找的是向量汇编器转换器,该转换器需要一个数据帧列的数组并生成一个向量列,然后可以将ML管道与汇编器和PCA一起使用。

帮助文档在这里

  1. 矢量汇编程序:https://spark.apache.org/docs/latest/ml-features.html#vectorassembler

  2. ml管道:https://spark.apache.org/docs/latest/ml-pipeline.html

如果您需要的不仅仅是PCA,则可以使用低级RDD转换。