Spark DataFrame/RDD 中的前 N ​​个项目

2023-11-29

我的要求是从数据框中获取前 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)]列值计数: 读取:((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|
// +-----+-----+-----+

where:

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|
// +-----+-----+-----+

So like pault said- 只是 ”的某种组合sort() and limit()".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark DataFrame/RDD 中的前 N ​​个项目 的相关文章

随机推荐

  • 通过 Outlook 在 R 中发送电子邮件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在 R 中通过 Outlook 发送电子邮件 所有的例子sendmailR使用 Gmail 服务器 但我不能这样做 您可以使用RDCOMClient包从 R 中访问 COM
  • SQL Server LocalDB 实例无法启动(自动)

    我有一个 WPF 应用程序连接到 SQL Server 2014 Express LocalDB 即本地数据库 mdf数据库文件 该应用程序使用 Entity Framework Core 库版本 7 0 0 rc1 final 这是我正在
  • JsonConstructor 在 IEnumerable 属性上失败?

    因此 使用访问器设置可枚举效果非常好 public class SetEnumerableWithAccessor public IEnumerable
  • React 中使用鼠标滚轮缩放图像

    所以我正在尝试重制这个版本 取自并修改自这个帖子 在 React 中使用鼠标滚轮进行图像缩放 问题是 即使在 React 中使用相同的数学和逻辑 它也不能完美地工作 我不知道为什么 图像似乎没有在光标所在的位置缩放 这是我的组件 impor
  • 如何使用saxon内置目录功能

    我下载了 SaxonHE9 4 0 6J 并希望在 CLI 上处理 XHTML 然而 Saxon 尝试从 W3C 加载 DTD 并且每个简单命令都需要花费太多时间 我有 xml 目录 我通过设置指向目录文件的 env 变量成功地将其与 xm
  • vec_sld 字节序敏感吗?

    我正在开发具有核心加密功能的 PowerPC 机器 我在使用内置函数将 AES 密钥扩展从大端移植到小端时遇到问题 大端有效 但小端无效 下面的算法是一个片段中呈现的IBM 博客文章 我认为我已将问题隔离到下面的第 2 行 typedef
  • 防止Oracle中重复插入数据

    我有表 COBA 有 3 个字段 它们是 NOMER NAMA KETERANGAN 表中存在这样的数据 我想向该表插入另一个值 但是如何防止在 Oracle 中重复插入查询数据 我尝试使用 WHERE NOT EXIST 这是我的查询 I
  • 将鞋子集成到 Aptana Studio RadRails 中

    我怎样才能运行我的Carpet直接从 Aptana Studio 与 RadRails 应用程序 将 Shoes exe 设置为 VM 解释器将不起作用 如果 Ruby 项目中有该文件 则可以执行以下操作 转到运行 gt 外部工具 gt 外
  • 如何同时打开 Pygame 窗口和 Tkinter 窗口?

    我正在使用 Pygame 模块制作一个简单的游戏 我需要在 Pygame 窗口旁边打开 Tkinter 窗口 每当我尝试打开两个窗口时 第二个窗口只有在我杀死第一个窗口后才会打开 现在 我能想到的唯一解决方案是使用多线程 但是 我无法实施它
  • ld:在 MacOS / nasm 上找不到架构 x86_64 的符号

    我是汇编编程新手 所以我提前道歉 我在链接第一个时遇到问题Hello world汇编程序在MacOS and nasm section data text db Hello World 10 section text global star
  • 在django中删除带有表单的对象

    我正在显示一张桌子 每行都应该有一个删除按钮 用于从表中删除元素 我的问题是 我不确定如何将元素的 id 传递给视图 html for post in posts div h3 Zuletzt ausgew hlt h3 p publish
  • Rails Asset Pipeline - 错误的指纹

    我的 Rails 4 应用程序有new html erb其中引用了form html erb app assets templates jobs new html erb
  • c 中对“getline”的未定义引用

    我正在学习在 C 编程中使用 getline 并尝试了以下代码http crasseux com books ctutorial getline html include
  • 为什么 Python 3 不向后兼容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我了解到 Python 3
  • 使用特殊的复制赋值运算符而不是简单的析构函数和就地构造函数的原因

    我有一个有自己的资源管理的课程 class Lol private This is data which this class allocates char mName nullptr public Lol std string str I
  • Jqgrid 上的外部工具提示插件

    目前 我没有使用任何其他插件作为鼠标悬停在网格行上的工具提示 我在用 list setCell rowid Name title my custom tooltip on cell 哪里的Name是要设置工具提示的列名称 rowid识别行
  • 以编程方式确定某人是否拥有网站?

    我需要找出确定某人是否是网站的实际所有者的最佳方法 我不仅仅指域 尽管在很多情况下可能是这样 我的第一个想法是让他们在 HTML 中添加一个我的程序可以抓取的特殊注释 例如 这种方法的一个可能的问题是 理论上有人可以将其添加到其页面的评论中
  • CSS 网格:分数中的分数

    我正在构建一个仪表板并想使用 CSS 网格 我设置了 4 列网格 在第 3 行中 我需要其中 2 个项目跨越 1 5 列 如何使 D 和 E 的宽度相等 以便它们各自占据可用空间的一半 并且它们加起来等于 C 的宽度 我需要创建不同的列结构
  • 使用 AsyncDisplayKit 添加自定义按钮

    我正在开发一个IOS应用程序 我使用 Facebook AsyncDisplayKit 库 我想要 ASNodeCell Bu 中的一个按钮 我得到了 变量 节点 在被块捕获时未初始化 如何在 ASNodeCell 中添加 UIButton
  • Spark DataFrame/RDD 中的前 N ​​个项目

    我的要求是从数据框中获取前 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