Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membahagikan Lajur Vektor kepada Baris dalam PySpark?

Bagaimana untuk Membahagikan Lajur Vektor kepada Baris dalam PySpark?

Patricia Arquette
Patricia Arquetteasal
2024-10-31 20:10:01406semak imbas

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>

Anda kemudian boleh memilih lajur yang dikehendaki:

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

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>

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>

Pilih lajur yang dikehendaki:

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

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!

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