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!