ホームページ  >  記事  >  バックエンド開発  >  PySpark でベクトル データを列に分割するにはどうすればよいですか?

PySpark でベクトル データを列に分割するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 17:22:02786ブラウズ

How to Split Vector Data into Columns in PySpark?

PySpark でベクター データを列に分割する

ベクター データを含む「ベクター」列を複数の列に 1 つずつ変換する問題ベクトルの次元は、データ分析や機械学習で頻繁に発生します。この質問は、Apache PySpark のコンテキストでこの問題を解決します。

Spark を使用した抽出 >= 3.0.0

Spark バージョン 3.0.0 以降では、簡略化されたこのアプローチは、vector_to_array を使用して利用できます。 function:

<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>

これにより、ベクトルの要素を含む配列を持つ新しい列 xs が作成されます。

Spark を使用した抽出 < 3.0.0

3.0.0 より前の Spark バージョンの場合、次のメソッドを使用できます:

RDD への変換と抽出:

DataFrame を RDD に変換し、ベクトルの要素ごとの抽出を実行します値:

<code class="python">def extract(row):
    return (row.word, ) + tuple(row.vector.toArray().tolist())

df.rdd.map(extract).toDF(["word"])</code>

UDF アプローチ:

ベクトル列を配列に変換するユーザー定義関数 (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
 .withColumn("xs", to_array(col("vector")))
 .select(["word"] + [col("xs")[i] for i in range(3)]))</code>

これらのアプローチは両方とも、ベクトル要素を個別の列に抽出し、さらなる分析と使用を可能にします。

以上がPySpark でベクトル データを列に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。