【问题标题】:Spark copy the top N selected Rows to a new data frameSpark将前N个选定的行复制到一个新的数据框
【发布时间】:2018-09-02 07:13:32
【问题描述】:

我有一些包含数百万行的数据框。我需要在其他数据框中选择前 100 个 id 的所有行

我知道如何获取 top column_ids

 df.groupBy("some_column_id").count()

这将返回列 ID 及其计数,现在我需要将前 100 个 ID 的行过滤到其他数据框。

我的示例表如下,因为用户 123678 的行数比其他用户多,我希望这两个在单独的数据框中

如何做到这一点?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    试试

    val c = df.groupBy("student id").count.orderBy(desc("count")).limit(100)
    val a = df.join(c,df.col("student id") === c.col("student id"), "leftsemi")
    

    【讨论】:

      【解决方案2】:

      您可以使用窗口函数来做到这一点:

      import org.apache.spark.sql.expressions.Window
      import org.apache.spark.sql.functions._
      
      val newDF = df
        .withColumn("count", count("*").over(Window.partitionBy("student_id")))
        .withColumn("rank", rank().over(Window.orderBy(col("count").desc)))
        .where(col("rank") <= 100)
      

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2019-03-03
        • 2016-03-21
        • 1970-01-01
        • 2019-12-29
        相关资源
        最近更新 更多