【发布时间】:2018-09-12 09:34:30
【问题描述】:
我想在pySpark中把List改为Vector,然后用这个列来机器学习模型进行训练。但是我的spark版本是1.6.0,没有VectorUDT()。那么我应该在我的 udf 函数中返回什么类型呢?
from pyspark.sql import SQLContext
from pyspark import SparkContext, SparkConf
from pyspark.sql.functions import *
from pyspark.mllib.linalg import DenseVector
from pyspark.mllib.linalg import Vectors
from pyspark.sql.types import *
conf = SparkConf().setAppName('rank_test')
sc = SparkContext(conf=conf)
spark = SQLContext(sc)
df = spark.createDataFrame([[[0.1,0.2,0.3,0.4,0.5]]],['a'])
print '???'
df.show()
def list2vec(column):
print '?????',column
return Vectors.dense(column)
getVector = udf(lambda y: list2vec(y),DenseVector() )
df.withColumn('b',getVector(col('a'))).show()
我尝试了很多类型,这个DenseVector()给我错误:
Traceback (most recent call last):
File "t.py", line 21, in <module>
getVector = udf(lambda y: list2vec(y),DenseVector() )
TypeError: __init__() takes exactly 2 arguments (1 given)
请帮帮我。
【问题讨论】:
标签: python apache-spark machine-learning pyspark apache-spark-mllib