python - 如何访问 Spark 稀疏向量元素

标签 python pyspark

我有一个通过 OneHotEncoder 在 spark 数据框中获得的稀疏向量列,基本上看起来像这样显示前 10 行:

+------------------------------------+
|check_indexed_encoded               |
+------------------------------------+
|                       (3,[2],[1.0])|
|                       (3,[0],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[2],[1.0])|
|                       (3,[0],[1.0])|
+------------------------------------+
only showing top 10 rows
我正在尝试访问这些元素,以将其基本上转换回(通常)热编码的假人,以便能够将整个帧毫无问题地转换为 Pandas。在 spark 中,我尝试使用 .GetItem 和 .element 但这也会引发错误消息“无法提取值:需要结构类型”。任何想法如何从中获取值?谢谢!

最佳答案

您可以使用 UDF。这应该这样做:

import pyspark.sql.functions as F
from pyspark.sql.types import DoubleType
from pyspark.sql.types import ArrayType

vector_udf = F.udf(lambda vector: vector.toArray().tolist(),ArrayType(DoubleType()))
df = df.withColumn("check_indexed_encoded_0", vector_udf(train["check_indexed_encoded"]).getItem(0))
要访问第二个元素,请使用 getItem(1) 等。

关于python - 如何访问 Spark 稀疏向量元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63843774/

相关文章:

date - Pyspark from_unixtime (unix_timestamp) 不转换为时间戳

python - 我可以在设置过程中将外部 (R) 进程连接到每个 pyspark 工作线程吗

python - numpy.concatenate 如何在列表上工作

python - 未找到 Ansible Firewalld 模块

python - scikit 的 MLPClassifier(和其他分类器)的训练分数低

apache-spark - 如何按多列分组并收集到 PySpark 中的列表中?

python - Spark SQL 性能 - 在最小值和最大值之间加入值

apache-spark - 我应该如何在 Ubuntu 12.04 上集成 Jupyter notebook 和 pyspark?

python - 带有三元运算符的 Walrus 运算符的正确语法是什么?

python - Pandas 数据帧 : assign to different columns based on positive/negative values