Pysparkデータフレームの列のすべての値を取得したいのですが。いくつかの検索を行いましたが、効率的で短い解決策は見つかりませんでした。
「名前」という列の値を取得したいとします。私には解決策があります:
sum(dataframe.select("name").toPandas().values.tolist(),[])
動作しますが、pandasに変換してからリストをフラット化するため、効率的ではありません...より良い、短い解決策はありますか?
以下のオプションは、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
の方がパフォーマンスが優れています。誰かが確認できれば素晴らしいでしょう。