web-dev-qa-db-ja.com

Pysparkデータフレームは列のすべての値を取得します

Pysparkデータフレームの列のすべての値を取得したいのですが。いくつかの検索を行いましたが、効率的で短い解決策は見つかりませんでした。

「名前」という列の値を取得したいとします。私には解決策があります:

sum(dataframe.select("name").toPandas().values.tolist(),[])

動作しますが、pandasに変換してからリストをフラット化するため、効率的ではありません...より良い、短い解決策はありますか?

2
chen

以下のオプションは、sumよりも優れたパフォーマンスを提供します。

collect_listを使用

import pyspark.sql.functions as f
my_list = df.select(f.collect_list('name')).first()[0]

RDDを使用:

my_list = df.select("name").rdd.flatMap(lambda x: x).collect()

確かではありませんが、2、3のストレステストでは、collect_listの方がパフォーマンスが優れています。誰かが確認できれば素晴らしいでしょう。

1
SMaZ