【问题标题】:How i can compare columns from another dataframe in PySpark我如何比较 PySpark 中另一个数据框的列
【发布时间】:2020-08-25 03:20:51
【问题描述】:

我有两个数据框:
首先是 AVG 值:

+----------+-----+  
| Category | AVG |  
+----------+-----+  
| Categ    | 1.0 |  
+----------+-----+  
| Categ2   | 0.5 | 
+----------+-----+
... 

...
第二个有闲置类别:类别、名称、价格
问题是: 如何从第一个表中删除所有价格低于平均价格的记录??
我试过这样:

dataGreaterAvge = data.where(data.Price >= avgCategoryPrice.where(data.Category == avgCategoryPrice.Category).collect()[0]["avg(Price)"])

dataGreaterAvge  - First dataframe
data - Second dataframe

但是,这并不能正常工作,因为它只从平均值表中获取第一个元素的值

【问题讨论】:

    标签: python pyspark apache-spark-sql


    【解决方案1】:

    Spark 像 SQL 一样工作......所以......

    首先你需要加入数据框。

    a = df1.alias('a')
    b = df2.alias('b')
    df_joined = a.join(b, a.Category == b.Category)
    

    那么你就可以正确过滤了

    from pyspark.sql import functions as f
    
    df_joined.select(col('a.category'),col('a.AVG'))\
             .where(col('a.AVG') > f.avg(col('b.avg')).groupBy(col('a.AVG'))
    

    【讨论】:

    • 不加入也可以吗?
    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2018-08-08
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    相关资源
    最近更新 更多