私はpyspark
を使用しています。私は、そのcol1
ある整数と私は整数spark use "set in"句でデータフレームをフィルタリングする
S1 = [1,2,3,4]
のリストを事前に定義その後、私はセットS1
にcol1
私my_sdf
内の行を返したいスパークデータフレームmy_sdf
を持っています。だから私は、次のようでした:
Test1 = my_sdf.filter(my_sdf.col1 in S1).cache()
# or Test1 = my_sdf.filter(my_sdf.col1 not in S1).cache()
Test1.count()
しかし、それは
とValueErrorを返しますブール値に列を変換できません:は「&」を使用「と」、してください「|」 DataFrameのブール式を構築するときは 'or'、 '〜'は 'not'です。
この問題の解決方法はわかりません。最終的には、S1 = []
を私の反復の開始点として空リストにしたいと思います。ループ中にS1
を更新します。同様に、not in S1
も機能しません。私はそれが動作
Test1 = my_sdf.filter((my_sdf.col1 <10) & (my_sdf.col1>2)).cache()
書き込みしようとしましたが、私はフィルタリング条件in S1
を使用している場合、それは動作しません。
もう1つ質問があります:これは何をcache()
ものしていますか?私はそれを置かないと違いが出るのだろうか?私は火花がコードを評価するためにlazy
であると言われましたので、私がTest.count()
を呼び出す前に、それは実際には前のフィルタリングコマンドを実行しません。しかし、私はこの正確なcache()
がどれほど正確であるか分かりません。
ありがとうございました!私はそれを使って演奏しました。私は 'not in'のために見つけたので、my_sdf.where(col( "col1")。isin(S1))&(〜col( "col1")。isin(S2))を使うことができました。 ) ' – ftxx
私が持っていたもう一つの質問は、' S1'がpythonリストではなく '[Row(S = 9527)、Row(S = 36)]'のような列を持つpysparkデータフレームこの 'isin'関数は動作しません。あなたはまだそれを動作させるように考えていますか? – ftxx