PySpark でベクトル列を行に分割する
PySpark では、ベクトル値を含む列を次元ごとに個別の列に分割するのが一般的ですタスク。この記事では、これを達成するためのさまざまなアプローチについて説明します。
Spark 3.0.0 以降
Spark 3.0.0 では、vector_to_array 関数が導入され、このプロセスが簡素化されました。
<code class="python">from pyspark.ml.functions import vector_to_array df = df.withColumn("xs", vector_to_array("vector"))</code>
次に、目的の列を選択できます。
<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>
Spark Less Than 3.0.0
アプローチ 1: 変換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>
アプローチ 2: 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>
目的の列を選択します:
<code class="python">df.select(["word"] + [col("xs")[i] for i in range(3)])</code>
Byこれらのメソッドのいずれかを実装すると、ベクター列を効果的に個々の列に分割でき、データの操作と分析が容易になります。
以上がPySpark でベクター列を行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。