如何从 org.apache.spark.mllib.linalg.VectorUDT 转换为 ml.linalg.VectorUDT

2024-03-25

我正在使用 Spark cluster 2.0,我想将向量转换为org.apache.spark.mllib.linalg.VectorUDT to org.apache.spark.ml.linalg.VectorUDT.

# Import LinearRegression class
from pyspark.ml.regression import LinearRegression

# Define LinearRegression algorithm
lr = LinearRegression()

modelA = lr.fit(data, {lr.regParam:0.0})

Error:

u'要求失败:列功能必须是 org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7 类型,但实际上是 org.apache.spark.mllib.linalg.VectorUDT@f71b0bce。'

有什么想法我将如何在矢量类型之间进行转换。

多谢。


在 PySpark 中,您需要一个 ormap超过 RDD。让我们使用第一个选项。首先是一些进口:

from pyspark.ml.linalg import VectorUDT
from pyspark.sql.functions import udf

和一个函数:

as_ml = udf(lambda v: v.asML() if v is not None else None, VectorUDT())

带有示例数据:

from pyspark.mllib.linalg import Vectors as MLLibVectors

df = sc.parallelize([
    (MLLibVectors.sparse(4, [0, 2], [1, -1]), ),
    (MLLibVectors.dense([1, 2, 3, 4]), )
]).toDF(["features"])

result = df.withColumn("features", as_ml("features"))

结果是

+--------------------+
|            features|
+--------------------+
|(4,[0,2],[1.0,-1.0])|
|   [1.0,2.0,3.0,4.0]|
+--------------------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 org.apache.spark.mllib.linalg.VectorUDT 转换为 ml.linalg.VectorUDT 的相关文章

随机推荐