首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pyspark中使用UDF函数时,稠密向量应该是什么类型?

问在Pyspark中使用UDF函数时,稠密向量应该是什么类型?
EN

Stack Overflow用户
提问于 2018-04-03 06:31:43
回答 1查看 6.5K关注 0票数 8

我希望在pySpark中将列表更改为向量,然后使用此列进行机器学习模型的培训。但是我的星火版本是1.6.0,它没有VectorUDT()。那么,在我的udf函数中应该返回哪种类型呢?

代码语言:javascript
复制
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()给了我错误:

代码语言:javascript
复制
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)

帮帮我求你了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 07:19:56

您可以使用向量和VectorUDT与UDF,

代码语言:javascript
复制
from pyspark.ml.linalg import Vectors, VectorUDT
from pyspark.sql import functions as F

ud_f = F.udf(lambda r : Vectors.dense(r),VectorUDT())
df = df.withColumn('b',ud_f('a'))
df.show()
+-------------------------+---------------------+
|a                        |b                    |
+-------------------------+---------------------+
|[0.1, 0.2, 0.3, 0.4, 0.5]|[0.1,0.2,0.3,0.4,0.5]|
+-------------------------+---------------------+

df.printSchema()
root
  |-- a: array (nullable = true)
  |    |-- element: double (containsNull = true)
  |-- b: vector (nullable = true)

关于VectorUDT,modules/pyspark/ml/linalg.html

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49623620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档