gpt4 book ai didi

scala - 来自 Spark DataFrame/RDD 的前 N ​​个项目

转载 作者:行者123 更新时间:2023-12-01 09:14:15 26 4
gpt4 key购买 nike

我的要求是从数据框中获取前 N 个项目。

我有这个数据帧:

val df = List(
("MA", "USA"),
("MA", "USA"),
("OH", "USA"),
("OH", "USA"),
("OH", "USA"),
("OH", "USA"),
("NY", "USA"),
("NY", "USA"),
("NY", "USA"),
("NY", "USA"),
("NY", "USA"),
("NY", "USA"),
("CT", "USA"),
("CT", "USA"),
("CT", "USA"),
("CT", "USA"),
("CT", "USA")).toDF("value", "country")

我能够将它映射到 RDD[((Int, String), Long)]colValCount:
读取:((colIdx,值),计数)
((0,CT),5)
((0,MA),2)
((0,OH),4)
((0,NY),6)
((1,USA),17)

现在我需要获取每个列索引的前 2 个项目。所以我的预期输出是这样的:
RDD[((Int, String), Long)]

((0,CT),5)
((0,NY),6)
((1,USA),17)

我试过在 DataFrame 中使用 freqItems api,但速度很慢。

欢迎任何建议。

最佳答案

例如:

import org.apache.spark.sql.functions._

df.select(lit(0).alias("index"), $"value")
.union(df.select(lit(1), $"country"))
.groupBy($"index", $"value")
.count
.orderBy($"count".desc)
.limit(3)
.show

// +-----+-----+-----+
// |index|value|count|
// +-----+-----+-----+
// | 1| USA| 17|
// | 0| NY| 6|
// | 0| CT| 5|
// +-----+-----+-----+

在哪里:
df.select(lit(0).alias("index"), $"value")
.union(df.select(lit(1), $"country"))

创建两列 DataFrame :
// +-----+-----+
// |index|value|
// +-----+-----+
// | 0| MA|
// | 0| MA|
// | 0| OH|
// | 0| OH|
// | 0| OH|
// | 0| OH|
// | 0| NY|
// | 0| NY|
// | 0| NY|
// | 0| NY|
// | 0| NY|
// | 0| NY|
// | 0| CT|
// | 0| CT|
// | 0| CT|
// | 0| CT|
// | 0| CT|
// | 1| USA|
// | 1| USA|
// | 1| USA|
// +-----+-----+

如果您希望每列有两个值:
import org.apache.spark.sql.DataFrame

def topN(df: DataFrame, key: String, n: Int) = {
df.select(
lit(df.columns.indexOf(key)).alias("index"),
col(key).alias("value"))
.groupBy("index", "value")
.count
.orderBy($"count")
.limit(n)
}

topN(df, "value", 2).union(topN(df, "country", 2)).show
// +-----+-----+-----+
// |index|value|count|
// +-----+-----+-----+
// | 0| MA| 2|
// | 0| OH| 4|
// | 1| USA| 17|
// +-----+-----+-----+

所以喜欢 pault said - 只是“ sort()limit() 的某种组合”。

关于scala - 来自 Spark DataFrame/RDD 的前 N ​​个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com