Bagaimana untuk Memisahkan Data Vektor kepada Lajur dalam PySpark?

Linda Hamilton
Lepaskan: 2024-10-31 17:22:02
asal
797 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!