不知道爲什麼我在這個過程中遇到了困難,考慮到在R或熊貓中執行相當容易,似乎很簡單。我想避免使用熊貓,因爲我正在處理大量數據,並且我相信toPandas()
會將所有數據加載到pyspark中的驅動程序內存中。Pyspark按另一個數據幀的列過濾數據幀
我有2個數據框:df1
和df2
。我想過濾df1
(刪除所有行),其中df1.userid = df2.userid
和df1.group = df2.group
。我不知道我是否應該使用filter()
,join()
,或sql
例如:
df1:
+------+----------+--------------------+
|userid| group | all_picks |
+------+----------+--------------------+
| 348| 2|[225, 2235, 2225] |
| 567| 1|[1110, 1150] |
| 595| 1|[1150, 1150, 1150] |
| 580| 2|[2240, 2225] |
| 448| 1|[1130] |
+------+----------+--------------------+
df2:
+------+----------+---------+
|userid| group | pick |
+------+----------+---------+
| 348| 2| 2270|
| 595| 1| 2125|
+------+----------+---------+
Result I want:
+------+----------+--------------------+
|userid| group | all_picks |
+------+----------+--------------------+
| 567| 1|[1110, 1150] |
| 580| 2|[2240, 2225] |
| 448| 1|[1130] |
+------+----------+--------------------+
編輯: 我試過很多加盟()和filter()函數,我相信我得到的最接近是:
cond = [df1.userid == df2.userid, df2.group == df2.group]
df1.join(df2, cond, 'left_outer').select(df1.userid, df1.group, df1.all_picks) # Result has 7 rows
我嘗試了一羣不同的連接類型的,我也嘗試了不同的cond
值: COND =((df1.userid == df2.userid)&(df2.group == df2.group)) #結果有7行 cond =((df1.use rid!= df2.userid)&(df2.group!= df2.group))#結果有2行
但是,好像連接正在添加額外的行,而不是刪除。
我使用python 2.7
和spark 2.1.0
你嘗試加入嗎? – eliasah
@eliasah是的,我嘗試了各種各樣的東西,包括連接,過濾器和sql查詢。我很抱歉沒有發佈我的代碼和我試過的東西,我知道這不公平。我之所以沒有這樣做,是因爲我嘗試了很多東西,也因爲我簡化了我的問題。讓我編輯這個問題,並顯示我已經嘗試過。 – drewyupdrew