Apache spark 矢量汇编程序仅输出到DenseVector?

Apache spark 矢量汇编程序仅输出到DenseVector?,apache-spark,pyspark,Apache Spark,Pyspark,矢量汇编程序的功能有一些非常烦人的地方。 我目前正在将一组列转换为单个列 向量,然后使用StandardScaler函数应用缩放 添加到包含的功能。然而,似乎有记忆的火花 原因,决定是使用DenseVector还是SparseVector来表示每一行要素。 但是,当您需要使用StandardScaler时,SparseVector的输入 无效,只允许使用densevector。有人知道解决这个问题的办法吗 编辑: 我决定只使用一个UDF函数,这将 将稀疏向量转换为稠密向量。有点傻,但很管用。你说

矢量汇编程序的功能有一些非常烦人的地方。 我目前正在将一组列转换为单个列 向量,然后使用StandardScaler函数应用缩放 添加到包含的功能。然而,似乎有记忆的火花 原因,决定是使用DenseVector还是SparseVector来表示每一行要素。 但是,当您需要使用StandardScaler时,SparseVector的输入 无效,只允许使用densevector。有人知道解决这个问题的办法吗

编辑: 我决定只使用一个UDF函数,这将
将稀疏向量转换为稠密向量。有点傻,但很管用。

你说得对,
矢量汇编程序
根据使用较少内存的格式选择密集输出格式和稀疏输出格式

SparseVector
转换到
DenseVector
不需要自定义项;只需使用:


另外,
StandardScaler
接受
SparseVector
,除非您在创建时使用mean=True设置
。如果确实需要反均值,则必须从所有分量中减去一个(可能是非零)数,这样稀疏向量就不再稀疏。

在VectorAssembler将其转换为稀疏向量后,可以将其转换为稠密向量

这就是我所做的

创建DenseVector案例类

case class vct(features:Vector)
将稀疏向量列转换为密集向量列

val new_df=df.select(“稀疏向量列”).map(x=>{

vct(x.getAs[org.apache.spark.mllib.linalg.SparseVector](1.toDense)}).toDF()

问题在PySpark中,而不是Scala中。如果我不知道类型,我就不能在map函数中调用toArray
case class vct(features:Vector)