首页  >  文章  >  后端开发  >  如何在 PySpark 中将 VectorUDT 转换为列?

如何在 PySpark 中将 VectorUDT 转换为列?

Patricia Arquette
Patricia Arquette原创
2024-10-31 18:34:01169浏览

How do you Convert VectorUDTs into Columns in PySpark?

使用 PySpark 将 VectorUDT 分解为列

在 PySpark 中,您可能需要从存储为 VectorUDT 的向量列中提取各个维度。为此,您可以根据您的 Spark 版本利用各种方法。

Spark >= 3.0.0

PySpark 3.0.0 带来了内置功能此任务:

<code class="python">from pyspark.ml.functions import vector_to_array

df.withColumn("xs", vector_to_array("vector")).select(["word"] + [col("xs")[i] for i in range(3)])</code>

这简洁地将向量转换为数组并投影所需的列。

Spark

Spark

3.0.0

<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>
3.0.0 之前的 Spark 版本需要更复杂的方法:

RDD 转换:

<code class="python">from pyspark.sql.functions import udf, col
from pyspark.sql.types import ArrayType, DoubleType

def to_array(col):
    return udf(lambda v: v.toArray().tolist(), ArrayType(DoubleType()))(col)

df.withColumn("xs", to_array(col("vector"))).select(["word"] + [col("xs")[i] for i in range(3)])</code>

UDF 方法:

注意:

为了提高性能,请确保将 asNon certainistic 与 UDF 一起使用(需要 Spark 2.3)。

Scala 等效项有关这些方法的 Scala 等效项,请参阅“Spark Scala:如何将 Dataframe[vector] 转换为 DataFrame[f1:Double, ..., fn: Double)]。”

以上是如何在 PySpark 中将 VectorUDT 转换为列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn