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 サイトの他の関連記事を参照してください。