PySpark: ベクトルを列に分割する
PySpark では、ベクトル列を持つ DataFrame が発生し、それを複数に分割する必要がある場合があります。列。各次元に 1 つずつあります。これを実現する方法は次のとおりです。
Spark >= 3.0.0
Spark 3.0.0 以降、ベクトル コンポーネントを抽出する便利な方法は、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>
Spark の場合 3.0.0
方法 1:RDD 変換
1 つのアプローチには、DataFrame を RDD に変換し、ベクトル コンポーネントを手動で抽出することが含まれます。<code class="python">rdd = df.rdd.map(lambda row: (row.word, ) + tuple(row.vector.toArray().tolist())) result = rdd.toDF(["word"])</code>
方法 2: UDF の作成
または、ユーザー定義関数 (UDF) を作成し、それをベクター列に適用することもできます:<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>
以上がPySpark でベクター列を個々の列に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。