Mos*_*afa 6 machine-learning apache-spark pyspark apache-spark-ml apache-spark-mllib
我正在使用Spark cluster 2.0,我想将矢量转换org.apache.spark.mllib.linalg.VectorUDT为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})
错误:
你的要求失败:列要素的类型必须是org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7,但实际上是org.apache.spark.mllib.linalg.VectorUDT@f71b0bce.
有什么想法我如何在矢量类型之间进行这种转换.
非常感谢.
在PySpark中,你需要一个或map多个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]|
+--------------------+
| 归档时间: | 
 | 
| 查看次数: | 2902 次 | 
| 最近记录: |