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!