如何删除每组计数低于阈值的记录?
How to remove records with their count per group below a threshold?
这是数据框:
id | sector | balance
---------------------------
1 | restaurant | 20000
2 | restaurant | 20000
3 | auto | 10000
4 | auto | 10000
5 | auto | 10000
如何找到每个 sector
类型的计数并删除具有 sector
类型计数低于特定 LIMIT
的记录?
以下:
dataFrame.groupBy(columnName).count()
给我一个值在该列中出现的次数。
如何在 Spark 和 Scala 中使用 DataFrame API?
由于它是一个数据框,您可以使用 SQL 查询,例如
select sector, count(1)
from TABLE
group by sector
having count(1) >= LIMIT
不知道这样是不是最好的方法。但这对我有用。
def getRecordsWithColumnFrequnecyLessThanLimit(dataFrame: DataFrame, columnName: String, limit: Integer): DataFrame = {
val g = dataFrame.groupBy(columnName)
.count()
.filter("count<" + limit)
.select(columnName)
.rdd
.map(r => r(0)).collect()
dataFrame.filter(dataFrame(columnName) isin (g:_*))
}
您可以使用 SQL Window 来做到这一点。
import org.apache.spark.sql.expressions.Window
yourDf.withColumn("count", count("*")
.over(Window.partitionBy($"colName")))
.where($"count">2)
// .drop($"count") // if you don't want to keep count column
.show()
对于给定的数据框
import org.apache.spark.sql.expressions.Window
dataFrame.withColumn("count", count("*")
.over(Window.partitionBy($"sector")))
.where($"count">2)
.show()
您应该会看到这样的结果:
id | sector | balance | count
------------------------------
3 | auto | 10000 | 3
4 | auto | 10000 | 3
5 | auto | 10000 | 3
这是数据框:
id | sector | balance
---------------------------
1 | restaurant | 20000
2 | restaurant | 20000
3 | auto | 10000
4 | auto | 10000
5 | auto | 10000
如何找到每个 sector
类型的计数并删除具有 sector
类型计数低于特定 LIMIT
的记录?
以下:
dataFrame.groupBy(columnName).count()
给我一个值在该列中出现的次数。
如何在 Spark 和 Scala 中使用 DataFrame API?
由于它是一个数据框,您可以使用 SQL 查询,例如
select sector, count(1)
from TABLE
group by sector
having count(1) >= LIMIT
不知道这样是不是最好的方法。但这对我有用。
def getRecordsWithColumnFrequnecyLessThanLimit(dataFrame: DataFrame, columnName: String, limit: Integer): DataFrame = {
val g = dataFrame.groupBy(columnName)
.count()
.filter("count<" + limit)
.select(columnName)
.rdd
.map(r => r(0)).collect()
dataFrame.filter(dataFrame(columnName) isin (g:_*))
}
您可以使用 SQL Window 来做到这一点。
import org.apache.spark.sql.expressions.Window
yourDf.withColumn("count", count("*")
.over(Window.partitionBy($"colName")))
.where($"count">2)
// .drop($"count") // if you don't want to keep count column
.show()
对于给定的数据框
import org.apache.spark.sql.expressions.Window
dataFrame.withColumn("count", count("*")
.over(Window.partitionBy($"sector")))
.where($"count">2)
.show()
您应该会看到这样的结果:
id | sector | balance | count
------------------------------
3 | auto | 10000 | 3
4 | auto | 10000 | 3
5 | auto | 10000 | 3