Bagaimana untuk Membahagikan Lajur Vektor kepada Baris dalam PySpark?

Patricia Arquette
Lepaskan: 2024-10-31 20:10:01
asal
484 orang telah melayarinya

How to Split a Vector Column into Rows in PySpark?

Memisahkan Lajur Vektor kepada Baris dalam PySpark

Dalam PySpark, membelah lajur yang mengandungi nilai vektor kepada lajur berasingan untuk setiap dimensi adalah perkara biasa tugasan. Artikel ini akan membimbing anda melalui pendekatan yang berbeza untuk mencapai matlamat ini:

Spark 3.0.0 dan Ke Atas

Spark 3.0.0 memperkenalkan fungsi vector_to_array, memudahkan proses ini:

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

df = df.withColumn("xs", vector_to_array("vector"))</code>
Salin selepas log masuk

Anda kemudian boleh memilih lajur yang dikehendaki:

<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>
Salin selepas log masuk
Salin selepas log masuk

Spark Kurang Daripada 3.0.0

Pendekatan 1: Menukar kepada RDD

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

df.rdd.map(extract).toDF(["word"])  # Vector values will be named _2, _3, ...</code>
Salin selepas log masuk

Pendekatan 2: Menggunakan UDF

<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 = df.withColumn("xs", to_array(col("vector")))</code>
Salin selepas log masuk

Pilih lajur yang dikehendaki:

<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>
Salin selepas log masuk
Salin selepas log masuk

Oleh melaksanakan mana-mana kaedah ini, anda boleh memisahkan lajur vektor kepada lajur individu dengan berkesan, menjadikannya lebih mudah untuk digunakan dan menganalisis data anda.

Atas ialah kandungan terperinci Bagaimana untuk Membahagikan Lajur Vektor kepada Baris 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