如何从pyspark SparseVector获取密钥

如何从pyspark SparseVector获取密钥,pyspark,tf-idf,Pyspark,Tf Idf,我进行了tf idf转换,现在我想从结果中获取键和值 我使用以下udf代码获取值: def extract_values_from_vector(vector): return vector.values.tolist() extract_values_from_vector_udf = udf(lambda vector:extract_values_from_vector(vector), ArrayType(DoubleType())) extract = rescaledDa

我进行了tf idf转换,现在我想从结果中获取键和值

我使用以下udf代码获取值:

def extract_values_from_vector(vector):
    return vector.values.tolist()

extract_values_from_vector_udf = udf(lambda vector:extract_values_from_vector(vector), ArrayType(DoubleType()))

extract = rescaledData.withColumn("extracted_keys", extract_keys_from_vector_udf("features"))
因此,如果sparsevector看起来像: features=SparseVector(123241,{20672:4.423337393:0.0109847:3.7096118474:5.4042}))

“我的摘录”中提取的\u密钥将如下所示: [4.4233,0.0,3.7096,5.4042]

我的问题是,如何在SparseVector字典中获取密钥?例如键=[2067237310984711844]

我正在尝试以下代码,但它不会工作

def extract_keys_from_vector(vector):
    return vector.indices.tolist()
extract_keys_from_vector_udf = spf.udf(lambda vector:extract_keys_from_vector(vector), ArrayType(DoubleType()))
它给我的结果是:[null,null,null,null]

有人能帮忙吗?
非常感谢

因为答案在上面的评论中,我想我会花这个时间(当然是在等待写拼花地板的时候)来写下答案

from pyspark.sql.types import *
from pyspark.sql import functions as F

def extract_keys_from_vector(vector):
    return vector.indices.tolist()

feature_extract = F.UserDefinedFunction(lambda vector: extract_keys_from_vector(vector), ArrayType(IntegerType()))

df = df.withColumn("features", feature_extract(F.col("features")))

我不这么认为,那是RDD@Astory-出纳员索引是整数值,但您的UDF返回一个双精度数组。我猜你只是希望它是
IntegerType()
@Sergey Khudyakov我想你是对的!你想回答这个问题,我可以接受吗?