在 Spark 中将数据框列转换为向量
Posted
技术标签:
【中文标题】在 Spark 中将数据框列转换为向量【英文标题】:Converting Dataframe Columns to Vectors in Spark 【发布时间】:2018-11-09 02:59:54 【问题描述】:我是 spark 新手,我正在尝试使用一些 MLlib 函数来帮助我完成一个学校项目。所有关于如何使用 MLlib 进行分析的文档似乎都使用了向量,我想知道我是否可以只配置我想要对数据框执行的操作,而不是 spark 中的向量。
例如,在进行 PCA 的 scala 文档中是:
"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)"
等等......这里是:https://spark.apache.org/docs/latest/ml-features.html#pca
有没有一种方法我不必创建这些向量,只需将其配置到我已经创建的数据框。我已经创建的数据框有 50 多列和 15,000 多行,因此为每列制作向量实际上并不可行。 有没有人有任何想法或建议。最后,不幸的是,对于我的项目,我仅限于在 Scala 中使用 Spark,我不允许使用 Pyspark、Java for Spark 或 SparkR。 如果有任何不清楚的地方,请告诉我。 谢谢!
【问题讨论】:
【参考方案1】:您正在寻找的是向量汇编器转换器,它采用一组数据框列并生成单个向量列,然后您可以将 ML 管道与汇编器和 PCA 一起使用。
帮助文档在这里
向量汇编器:https://spark.apache.org/docs/latest/ml-features.html#vectorassembler
ml 管道:https://spark.apache.org/docs/latest/ml-pipeline.html
如果您需要的不仅仅是 PCA,您可以使用低级 RDD 转换。
【讨论】:
以上是关于在 Spark 中将数据框列转换为向量的主要内容,如果未能解决你的问题,请参考以下文章
将带有 JSON 对象数组的 Spark 数据框列转换为多行