【问题标题】:How can I check if an instance is in a dataframe in pyspark and get the ocurrence from the dataframe?如何检查实例是否在 pyspark 的数据框中并从数据框中获取出现次数?
【发布时间】:2018-02-23 09:46:11
【问题描述】:

我有一个从具有 3 个不同属性的数据帧中提取的实例:Atr1、Atr2 和 Atr3。

另一方面,我有一个包含 4 个属性的数据框:Atr1、Atr2、Atr3、Atr4,但属性 Atr1、Atr2 和 Atr3 与前面提到的实例相同。我有这样的事情:

Instance:

[Row(Atr1=u'A', Atr2=u'B', Atr3=24)]

Dataframe:

+------+------+------+------+
| Atr1 | Atr2 | Atr3 | Atr4 |
+------+------+------+------+
|  'C' |  'B' |  21  |  'H' |
+------+------+------+------+
|  'D' |  'B' |  21  |  'J' |
+------+------+------+------+
|  'E' |  'B' |  21  |  'K' |
+------+------+------+------+
|  'A' |  'B' |  24  |  'I' |
+------+------+------+------+

因此,有了上面的实例,我想检查它是否在数据框中存在一个实例,该实例具有属性 Atr1、Atr2 和 Atr3 的值,如果存在,则获取 Atr4 的值。在这种情况下,“我”。

【问题讨论】:

    标签: dataframe pyspark row pyspark-sql find-occurrences


    【解决方案1】:
    from pyspark.sql.types import Row
    from pyspark.sql.functions import col
    
    #sample data
    row_list = [Row(Atr1=u'A', Atr2=u'B', Atr3=24),
                Row(Atr1=u'E', Atr2=u'F', Atr3=20),]
    df = sc.parallelize([('C', 'B', 21, 'H'),
                         ('D', 'B', 21, 'J'),
                         ('E', 'B', 21, 'K'),
                         ('A', 'B', 24, 'I')]).\
        toDF(["Atr1", "Atr2", "Atr3", "Atr4"])
    
    search_df = df.join(sqlContext.createDataFrame(row_list), ["Atr1", "Atr2", "Atr3"], "right").\
        withColumn("rowItem_Exist", col('Atr4').isNotNull())
    search_df.show()
    

    输出是:

    +----+----+----+----+-------------+
    |Atr1|Atr2|Atr3|Atr4|rowItem_Exist|
    +----+----+----+----+-------------+
    |   E|   F|  20|null|        false|
    |   A|   B|  24|   I|         true|
    +----+----+----+----+-------------+
    

    【讨论】:

      【解决方案2】:
      df[(df['Atr1'] == row.Atr1) & (df['Atr2'] == row.Atr2) & (df['Atr3'] == row.Atr3)].Atr4
      

      row Row 和 df 您提到的 DataFrame。

      【讨论】:

        猜你喜欢
        • 2018-02-12
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多