PySpark で VectorUDT を列に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-31 18:34:01
オリジナル
173 人が閲覧しました

How do you Convert VectorUDTs into Columns in PySpark?

PySpark を使用して VectorUDT を列に分解する

PySpark では、VectorUDT として保存されたベクトル列から個々の次元を抽出する必要が生じる場合があります。これを実現するには、Spark のバージョンに基づいてさまざまなアプローチを活用できます。

Spark >= 3.0.0

PySpark 3.0.0 には、次の組み込み機能が備わっています。このタスク:

<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>
ログイン後にコピー

これは、ベクトルを配列に簡潔に変換し、必要な列を投影します。

Spark < 3.0.0

3.0.0 より前の Spark バージョンでは、より複雑なアプローチが必要です:

RDD 変換:

<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>
ログイン後にコピー

UDF メソッド:

<code class="python">from pyspark.sql.functions import udf, col
from pyspark.sql.types import ArrayType, DoubleType

def to_array(col):
    return udf(lambda v: v.toArray().tolist(), ArrayType(DoubleType()))(col)

df.withColumn("xs", to_array(col("vector"))).select(["word"] + [col("xs")[i] for i in range(3)])</code>
ログイン後にコピー

注: パフォーマンスを向上させるには、UDF で asNondeterministic が使用されていることを確認してください (Spark 2.3 が必要です)。

Scala の同等物

これらのアプローチと同等の Scala については、「Spark Scala: Dataframe[vector] を DataFrame[f1:Double, ..., fn: Double)] に変換する方法」を参照してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!