2017-08-07 5 views
0

Pysparkのデータフレーム内の列の別個の値を取得しようとしていますが、それらの値をリストに保存すると、リストに「Row(no_children = 0) " しかし、私は自分のコードの別の部分のためにそれを使用するので、値だけが必要です。PysparkのDataframeの異なる値をリストに変換する

ので、理想的にのみALL_VALUES = [0,1,2,3,4]

all_values=sorted(list(df1.select('no_children').distinct().collect())) 
all_values 


[Row(no_children=0), 
Row(no_children=1), 
Row(no_children=2), 
Row(no_children=3), 
Row(no_children=4)] 

これは、実行するために15secsを周りにかかる通常のことですか?

ありがとうございました!

答えて

0

を取得するには、このような何かを行うことができ、

from pyspark.sql import functions as F 
>>> df1.show() 
+-----------+ 
|no_children| 
+-----------+ 
|   0| 
|   3| 
|   2| 
|   4| 
|   1| 
|   4| 
+-----------+ 

>>> df1.select(F.collect_set('no_children').alias('no_children')).first()['no_children'] 
[0, 1, 2, 3, 4] 
+0

ファンタスティック、このオプションは高速です。コマンドラインはWARN TaskSetManagerを出力しますが、ステージ849には非常に大きなサイズのタスク(165 KB)が含まれています。推奨されるタスクの最大サイズは100 KBです。 – Learner

+0

これは通常、巨大なリストがドライバからエグゼキュータに転送されたとき、またはデータの分割のために発生します。 Plsはこれをチェックします、https://stackoverflow.com/questions/28878654/spark-using-python-how-to-resolve-stage-x-contains-a-task-of-very-large-size-x – Suresh

+0

とにかく、この答えがあなたを助けてくれることを願ってあなたがそれでいいなら、それを受け入れることができますか? – Suresh

0

あなたは、列の明確なvalues.Hereを取得するための機能モジュールからcollect_setを使用することができる唯一の値

list = [r.no_children for r in all_values] 

list 
[0, 1, 2, 3, 4] 
関連する問題