2017-01-12 15 views
1

私はPySpark DataFramesが不変であることを知っています。そのため、PySpark DataFrameの既存の列に適用された変換の結果として新しい列を作成したいと思います。データが大きすぎてcollect()を使用できません。上記PySpark DataFrameカラムから要素を削除する

[1] 
[1,2] 
[1,2,3] 
[2,3] 

私の実際のデータフレームがリストを持っているとして、おもちゃの例である:

問題の列には、固有のint型(与えられたリストのintの無反復)、例えばのリストのリストであります最大長は52の一意のintです。私は、intのリストのリストを反復し、各ループの1つの要素を削除する列を生成したいと思います。削除される要素は、すべてのリストの一意の要素のセットの1つで、この場合は[1,2,3]です。結果があるように

素子1を削除し、:第2の反復について

[] 
[2] 
[2,3] 
[2,3] 

:最初の繰り返しのためにそう

結果であるように、要素2を削除します。

[1] 
[1] 
[1,3] 
[3] 

などであり、上記の3の要素を繰り返します。

この「フィルターされた」列を元のDataFrameの行フィルターとして使用して、各反復で、元のPySpark DataFrameに結果を追加していくつかの照会を実行したいとします。

私の質問は、PySpark DataFrameの列をリストに変換するにはどうすればいいですか?データセットが大きいため、df.select('columnofintlists').collect()はメモリの問題を引き起こします(例:Kryo serialization failed: Buffer overflow. Available: 0, required: 1448662. To avoid this, increase spark.kryoserializer.buffer.max value.)。

答えて

0

df.toLocalIterator()はループのイテレータを返します

関連する問題