Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memisahkan Data Vektor kepada Lajur dalam PySpark?

Bagaimana untuk Memisahkan Data Vektor kepada Lajur dalam PySpark?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 17:22:02851semak imbas

How to Split Vector Data into Columns in PySpark?

Memisahkan Data Vektor kepada Lajur dalam PySpark

Masalah menukar lajur "vektor" dengan data vektor kepada berbilang lajur, satu untuk setiap satu dimensi vektor, sering timbul dalam analisis data dan pembelajaran mesin. Soalan ini menangani isu ini dalam konteks Apache PySpark.

Pengeluaran Menggunakan Spark >= 3.0.0

Untuk Spark versi 3.0.0 dan ke atas, dipermudahkan pendekatan tersedia menggunakan fungsi vector_to_array:

<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>

Ini akan mencipta lajur xs baharu dengan tatasusunan yang mengandungi elemen vektor.

Pengekstrakan Menggunakan Spark < 3.0.0

Untuk versi Spark sebelum 3.0.0, kaedah berikut boleh digunakan:

Menukar kepada RDD dan Mengekstrak:

Tukar DataFrame kepada RDD dan lakukan pengekstrakan nilai vektor mengikut elemen:

<code class="python">def extract(row):
    return (row.word, ) + tuple(row.vector.toArray().tolist())

df.rdd.map(extract).toDF(["word"])</code>

Pendekatan UDF:

Tentukan fungsi yang ditentukan pengguna (UDF ) untuk menukar lajur vektor kepada tatasusunan:

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

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

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

Kedua-dua pendekatan ini akan mengekstrak elemen vektor ke dalam lajur berasingan, membolehkan analisis dan penggunaan selanjutnya.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Data Vektor kepada Lajur dalam PySpark?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn