Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memisahkan Data Vektor kepada Lajur dalam 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!