Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Membahagikan Lajur Vektor kepada Lajur Individu dalam PySpark?

Bagaimana untuk Membahagikan Lajur Vektor kepada Lajur Individu dalam PySpark?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 12:25:291036semak imbas

How to Split a Vector Column into Individual Columns in PySpark?

PySpark: Pisahkan Vektor Kepada Lajur

Dalam PySpark, anda mungkin menemui DataFrame dengan lajur vektor dan keperluan untuk membahagikannya kepada beberapa lajur, satu untuk setiap dimensi. Begini cara untuk mencapainya:

Untuk Spark >= 3.0.0

Bermula dari Spark 3.0.0, cara mudah untuk mengekstrak komponen vektor menggunakan fungsi vector_to_array :

<code class="python">df = df.withColumn("xs", vector_to_array("vector"))

# Pick the first three dimensions for illustration
result = df.select(["word"] + [col("xs")[i] for i in range(3)])</code>

Untuk Spark < 3.0.0

Kaedah 1: Penukaran RDD

Satu pendekatan melibatkan penukaran DataFrame kepada RDD dan mengekstrak komponen vektor secara manual:

<code class="python">rdd = df.rdd.map(lambda row: (row.word, ) + tuple(row.vector.toArray().tolist()))
result = rdd.toDF(["word"])</code>

Kaedah 2: Penciptaan UDF

Sebagai alternatif, anda boleh mencipta fungsi takrif pengguna (UDF) dan gunakannya pada lajur vektor:

<code class="python">@udf(ArrayType(DoubleType()))
def to_array(vector):
    return vector.toArray().tolist()

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

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