在 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 中将数据框列转换为向量的主要内容,如果未能解决你的问题,请参考以下文章

Python:在数据框列中将秒转换为日期时间格式

将 spark 的数据框列转换为 json 对象

将带有 JSON 对象数组的 Spark 数据框列转换为多行

如何使用 Spark 数据框列上的函数或方法使用 Scala 进行转换

将列表转换为pyspark中的数据框列

在 Pyspark 中将 Pandas 数据帧转换为 Spark 数据帧的 TypeError