【问题标题】:Error while filtering a pyspark DataFrame过滤 pyspark DataFrame 时出错
【发布时间】:2021-08-31 18:39:14
【问题描述】:

我正在尝试过滤我的 DataFrame 以删除计数小于 100 的条目。“COMBINED”的 DataFrame 结果如下:

Row(movieID=26, avg(rating)=3.452054794520548, count=73)

当我运行下面的代码时,我收到以下错误:

TypeError:'method' 和 'int' 的实例之间不支持 '>='

movieDataset = spark.createDataFrame(movies)
movieratings = movieDataset.groupBy("movieID").mean().drop("avg(movieID)")
topMovieIDs = movieDataset.groupBy("movieID").count()
combined = movieratings.join(topMovieIDs, on=["movieID"], how='inner')
filtered = combined.filter(combined.count >= 100).collect()

如何通过 100 或更大的计数过滤 DataFrame?

【问题讨论】:

    标签: python apache-spark filter pyspark


    【解决方案1】:

    不管,让它工作。

    应该看起来像

    filtered = combined.filter(combined[2] >= 100).collect()
    

    【讨论】:

    • 使用combined[2],您不是直接调用count,而是调用第三列。如果架构发生变化怎么办?添加更多列或更改顺序,您的代码将不再工作。
    【解决方案2】:

    试试这个:

    filtered = combined.filter(combined["count"] >= 100).collect()
    

    count 默认情况下是数据框方法名称。使用combined.count 是模棱两可的,既可以引用方法也可以引用列,因此您必须更具体。


    这也应该有效:

    from pyspark.sql.functions import col
    filtered = combined.filter(col("count") >= 100).collect()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多