我正在使用pyspark
。我有一個火花數據幀my_sdf
其col1
是一個整數,我預定整數在火花使用中「在一組」子句中過濾數據幀
S1 = [1,2,3,4]
的名單,然後我想在我的my_sdf
返回行,其中col1
在集合S1
。所以,我做了以下內容:
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布爾表達式。
我不知道如何解決這個問題。最後,我想開始S1 = []
是一個空列表作爲我迭代中的起點,在循環過程中,我將更新S1
。同樣,not in S1
也不起作用。我試着寫
Test1 = my_sdf.filter((my_sdf.col1 <10) & (my_sdf.col1>2)).cache()
它的工作原理,但如果我使用的過濾條件in S1
,那麼這是行不通的。
另一個問題是:這是什麼cache()
東西在做什麼?如果我不這樣做,會有所作爲嗎?我被告知火花是lazy
評估代碼,所以在我撥打Test.count()
之前,它實際上不執行前面的過濾命令。但我不確定這個cache()
的工作原理。
謝謝!我也玩過了,我找到了'not in',我們可以使用my_sdf.where((col(「col1」)。isin(S1))&(〜col(「col1」)。isin(S2)) )' – ftxx
我的另一個問題是:如果'S1'不是一個python列表,而是一個pyspark數據框,其中一列看起來像'[Row(S = 9527),Row(S = 36)]',那麼I測試這個'isin'功能不起作用。你有什麼想法仍然能夠工作嗎? – ftxx