[英]display unique values between two dataframe columns - pyspark
說我在2個數據幀中有兩個“ ID”列,我想顯示DF1中不存在的DF1中的ID
我不知道該使用聯接,合並還是isin。
cond = [df.name != df3.name]
df.join(df3, cond, 'outer').select(df.name, df3.age).collect()
不知道如果改變條件會給我結果。
在pyspark中,您可以使用leftanti連接,
>>> df1 = spark.createDataFrame([(0,'val1'),(1,'val2'),(4,'val4')],['id','val'])
>>> df1.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 4|val4|
+---+----+
>>> df2 = spark.createDataFrame([(0,'val1'),(1,'val2'),(3,'val3'),(2,'val2')],['id','val'])
>>> df2.show()
+---+----+
| id| val|
+---+----+
| 0|val1|
| 1|val2|
| 3|val3|
| 2|val2|
+---+----+
>>> df1.join(df2,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 4|val4|
+---+----+
同樣,
>>> df2.join(df1,'id','leftanti').show()
+---+----+
| id| val|
+---+----+
| 3|val3|
| 2|val2|
+---+----+
使用isin
和~df1['id]
進行數據幀比較。
df1:
id name
0 1 a
1 2 b
2 3 c
3 4 d
df2:
id name
0 1 aa
1 5 bb
2 2 cc
3 10 dd
result = df1.loc[~df1['id'].isin(df2['id'])]
result
id name
2 3 c
3 4 d
希望這個答案有幫助。
這是一個使用pyspark.sql中的isin過濾您不感興趣的ID的代碼片段。 map / lambda函數用於構建要過濾的ID列表。
from __future__ import print_function
from pyspark.sql import SparkSession
spark_session = SparkSession \
.builder \
.appName("test_isin") \
.getOrCreate()
dict1 = [[1,'a'], [2,'b'], [3,'c'], [4,'d']]
dict2 = [[1, 'aa'], [5,'bb'], [2, 'cc'], [10, 'dd']]
df1 = spark_session.createDataFrame(dict1, ["id", "name"])
df2 = spark_session.createDataFrame(dict2, ["id", "name"])
df2_id = df2.select(df2.id).collect()
ids_to_be_filtered = []
map(lambda each : ids_to_be_filtered.append(each.id), df2_id)
result = df1[~df1.id.isin(df2_id)]
result.show()
這也是文檔https://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html#pyspark.sql.Column.isin的鏈接
請不要忘記讓我知道它是否解決了您的問題:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.