【问题标题】:How can I check if an instance is in a dataframe in Pyspark?如何检查实例是否在 Pyspark 的数据框中?
【发布时间】:2018-02-12 11:11:41
【问题描述】:

我有一个从数据帧 df1 中提取的实例,我想检查该实例是否在 Pyspark 的另一个数据帧 df2 中。有办法面对吗?

例如:

实例:

+------+------+------+
| Atr1 | Atr2 | Atr3 |
+------+------+------+
|  'A' |   2  |  'B' |
+------+------+------+

数据框:

+------+------+------+
| Atr1 | Atr2 | Atr3 |
+------+------+------+
|  'C' |   1  |  'B' |
+------+------+------+
|  'D' |   2  |  'A' |
+------+------+------+
|  'E' |   2  |  'C' |
+------+------+------+
|  'A' |   2  |  'B' |
+------+------+------+

这样,我想得到真的,因为实例在数据框中(第 4 行)。

谢谢。

【问题讨论】:

  • 我不确定我是否正确理解了您的问题,但您是否正在寻找类似except 的内容?
  • 我正在寻找与除外相反的东西。我的意思是,告诉我实例是否在数据框中。我将编辑我的问题以便更好地理解。
  • 你试过instance.except(df).take(1).isEmpty吗?

标签: apache-spark dataframe filter pyspark instance


【解决方案1】:

Pyspark 不是执行此操作的正确语言,但仍然:

首先让我们创建我们的数据框:

df1 = spark.createDataFrame(sc.parallelize([['A', 2, 'B']]), ['Atr1', 'Atr2', 'Atr3'])
df2 = spark.createDataFrame(sc.parallelize([['C',1,'B'],['D',2,'A'],['E',2,'C'],['A',2,'B']]), ['Atr1', 'Atr2', 'Atr3'])

你可以使用:

  • subtract

    df1.subtract(df2).count() == 0
    
  • join

    df2.join(df1, ['Atr1', 'Atr2', 'Atr3']).count() > 0
    
  • filter

    df2.filter((df2.Atr1 == 'A') & (df2.Atr2 == 2) & (df2.Atr3 == 'B')).count() > 0
    

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    你可以取df1df2的交集,比较df1的个数是否等于交集的个数,如下:

    >>> df1 = spark.createDataFrame(sc.parallelize([['A', 2, 'B']]), ['Atr1', 'Atr2', 'Atr3'])
    >>> df2 = spark.createDataFrame(sc.parallelize([['C',1,'B'],['D',2,'A'],['E',2,'C'],['A',2,'B']]), ['Atr1', 'Atr2', 'Atr3'])
    >>> df1.show() 
    +----+----+----+
    |Atr1|Atr2|Atr3|
    +----+----+----+
    |   A|   2|   B|
    +----+----+----+
    
    >>> df2.show() 
    +----+----+----+
    |Atr1|Atr2|Atr3|
    +----+----+----+
    |   C|   1|   B|
    |   D|   2|   A|
    |   E|   2|   C|
    |   A|   2|   B|
    +----+----+----+
    
    >>> df2.intersect(df1).count() == df1.count() 
    True
    >>> 
    

    有关pyspark.sql.DataFrame.intersect 的信息,请查看文档here

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2018-03-02
      • 2018-05-01
      相关资源
      最近更新 更多