在 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中文網其他相關文章!