Python 显示两个数据帧列之间的唯一值-pyspark

Python 显示两个数据帧列之间的唯一值-pyspark,python,pyspark,Python,Pyspark,假设我在两个数据帧中有两个“ID”列,我想显示DF1中的ID,它在DF2中不存在 我不知道我应该使用join、merge还是isin cond = [df.name != df3.name] df.join(df3, cond, 'outer').select(df.name, df3.age).collect() 不确定改变条件是否会给我结果 使用isin和fir~df1['id]进行数据帧比较 df1: df2: 希望这个答案有帮助。使用isin和fir~df1['id]进行数据帧比较 d

假设我在两个数据帧中有两个“ID”列,我想显示DF1中的ID,它在DF2中不存在

我不知道我应该使用join、merge还是isin

cond = [df.name != df3.name]
df.join(df3, cond, 'outer').select(df.name, df3.age).collect()

不确定改变条件是否会给我结果

使用isin和fir
~df1['id]
进行数据帧比较

df1:

df2:


希望这个答案有帮助。

使用
isin
和fir
~df1['id]
进行数据帧比较

df1:

df2:


希望这个答案有帮助。

在pyspark中,您可以使用leftanti-join

>>> 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|
+---+----+

在pyspark中,可以使用leftanti-join

>>> 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|
+---+----+

下面是一个代码片段,它使用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()
这里还有到文档的链接


请不要忘记告诉我它是否解决了您的问题:)

这里有一个代码片段,它使用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()
这里还有到文档的链接


请不要忘记让我知道它是否解决了您的问题:)

有一个错误“DataFrame”对象没有属性“loc”。这可能是一个熊猫df?你能给我看看你的代码吗。您是否创建了df1和df2
loc
是在0.11中引入的,因此您需要升级熊猫。出现错误“DataFrame”对象没有属性“loc”。这可能是一个熊猫df?你能给我看看你的代码吗。您是否创建了df1和df2
loc
是在0.11中引入的,因此您需要升级您的熊猫。