以字节数组为键的ReduceByKey

2023-12-08

我想使用 RDD 对Tuple2<byte[], obj>, but byte[]相同内容的内容由于参考值不同而被视为不同的值。

我没有看到任何可以传递自定义比较器的内容。我可以转换byte[] into a String具有明确的字符集,但我想知道是否有更有效的方法。


自定义比较器是不够的,因为 Spark 使用hashCode用于组织分区中的键的对象的数量。 (至少 HashPartitioner 会做到这一点,您可以提供一个可以处理数组的自定义分区器)

包装数组以提供正确的equals and hashCode应该解决这个问题。 一个轻量级的包装器应该可以解决这个问题:

class SerByteArr(val bytes: Array[Byte]) extends Serializable {
    override val hashCode = bytes.deep.hashCode
    override def equals(obj:Any) = obj.isInstanceOf[SerByteArr] && obj.asInstanceOf[SerByteArr].bytes.deep == this.bytes.deep
}

快速测试:

import scala.util.Random
val data = (1 to 100000).map(_ => Random.nextInt(100).toString.getBytes("UTF-8"))
val rdd = sparkContext.parallelize(data)
val byKey = rdd.keyBy(identity)
// this won't work b/c the partitioner does not support arrays as keys
val grouped = byKey.groupByKey
// org.apache.spark.SparkException: Default partitioner cannot partition array keys.

// let's use the wrapper instead   

val keyable = rdd.map(elem =>  new SerByteArr(elem))
val bySerKey = keyable.keyBy(identity)
val grouped = bySerKey.groupByKey
grouped.count
// res14: Long = 100
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以字节数组为键的ReduceByKey 的相关文章

随机推荐

  • 应用程序上下文变量的值因应用程序错误而丢失

    我注意到 当我的应用程序遇到错误时 应用程序上下文变量的值也会重新初始化为其原始值 而不是更新后的值 根据我的理解 发生这种情况是因为应用程序被重新创建了 当应用程序发生错误时 如何保存和恢复应用程序上下文变量的值 如果您能更详细地解释我的
  • D3:如何通过更改数据文件源来动态刷新图表?

    如何通过更改文件 d3 访问来按需更新数据 例如 只需单击一下 它就会从新的数据文件中读取数据 并像 AJAX 一样向图表添加更多节点 我使用 d3 tsv 读取 data tsv 这是许多相同格式的文件之一 我做了一个简单的图表来说明我的
  • Matlab中无放回加权采样

    我有人口p向量中的索引和相应权重w 我想要得到k该人群的样本无需更换其中选择与随机权重成比例 我知道randsample可以用于通过替换进行选择 J randsample p k true w 但是当我用参数调用它时false代替true
  • 优化 JavaFX 中的内存泄漏

    我写了一段代码 让字母在我写的时候出现并飞翔 问题是它消耗大量内存 我已经对其进行了一些优化 分享path对象并在侦听器中更新其参数 每次打印新字母时调用 gc 但它仍然使用大量内存 那么关于如何减少其内存利用率有什么想法吗 提前致谢 pa
  • Web浏览器控制文件下载对话框绕过

    实际上我想使用 Webbrowser Control 从网站下载文件 但由于文件下载对话框 我无法自动执行下载过程 对于绕过它 我想使用 Web 客户端 并且需要将所有会话和 Cookie 从 Web 浏览器控件传输到 Web 客户端 或者
  • 获取“队列对象只能通过继承在进程之间共享”,但我没有使用队列

    我正在尝试使用 ProcessPoolExecutor 但收到错误 队列对象只能通过继承在进程之间共享 但我没有使用队列 至少没有明确使用 我找不到任何东西可以解释我做错了什么 这是一些演示该问题的代码 不是我的实际代码 from conc
  • 无法使用 Maven 执行 Junit5 测试 [重复]

    这个问题在这里已经有答案了 Maven执行 mvn clean test 我正在尝试使用junit5对于我的一个 Maven 项目 但无法在test阶段使用
  • 不规则间隔的热图

    我想根据下面的矩阵和边界创建一个热图 然后绘制数据 x1 x2 以查看属于各个类别的点 我能做的最好的事情就是使用seaborn 但是由于两个轴上的类间隔不均匀 因此很难读取两个轴上对应于点的值 有没有办法 使用seaborn或任何其他库
  • 从两个或多个现有表创建新表 (MySQL)

    问题 是否可以在 mySQL 中从两个或多个现有表创建一个表 Details 我可以创建一个像这样的表吗 CREATE TABLE IF NOT EXISTS USERNAME AGE INT NOT NULL CREATE TABLE I
  • 在 C# 中编译邮件的 HTML 正文

    我使用以下代码供用户向我的电子邮件发送报价 using System Net Mail MailMessage mail new MailMessage mail From new MailAddress Email Text mail T
  • 在无头模式下使用 Firefox 68.9.0esr 以及 GeckoDriver Selenium 和 Python 时出现 504 网关超时错误

    我用硒制作了一个容器图像 我用了一个ubi image来自 RedHat 作为基础镜像 我安装了以下版本的 geckodriver 和 Mozilla Firefox 壁虎驱动程序 0 26 0 e9783a644016 2019 10 1
  • 在 Windows 8.1 中安装 virtualenvwrapper-powershell,导入模块失败

    我正在尝试遵循指南here 我被困在Import Module virtualenvwrapper PowerShell 不断给我错误 import module 指定的模块 virtualenvwrapper 不是 已加载 因为在任何模块
  • 未找到 AWS ec2 winreg

    我正在尝试从亚马逊 EC2 大型实例运行 python 应用程序 然而 它在 scipy 中抱怨 因为它找不到名为 winreg 的东西 我不知道如何重新配置 它 所以它不再是问题 python2 app py Running on htt
  • Chrome 扩展如何在页面底部添加浮动栏?

    我正在创建一个需要注入浮动元素的 chrome 扩展 即position fixed 在页面底部 我的要求是 我需要从内容脚本访问其中的元素 这是因为我将事件附加到按钮 以便用户可以从浮动栏在当前选项卡上执行操作 我希望它的样式保持独立于当
  • 显示斯坦福 NER 置信度分数

    我使用斯坦福 NER CRFClassifier 从新闻文章中提取命名实体 为了实现主动学习 我想知道每个标记实体的类的置信度分数是多少 显示示例 地点 0 20 人员 0 10 组织 0 60 其他 0 10 这是我从文本中提取命名实体的
  • 启动 ASP.NET 表单身份验证

    我开始学习 ASP NET 表单身份验证 并且正在寻找一篇好文章来帮助我入门 我之前听说 ASP NET 表单身份验证使用大量数据库表 前面带有aspnet 但是我发现的任何例子都没有显示这一点 例如我认为有一个aspnet users t
  • 创建数据框时如何解决 scala.MatchError

    我有一个具有复杂结构行的文本文件 我正在使用客户转换器 它将给定的字符串 行 转换为 Pojo 类 countryInfo 转换后 我正在构建 DF POJO 类有一个字段 它是自定义类型列表 GlobalizedPlayTimeWindo
  • 调用unique_ptr子类继承的模板构造函数

    这不是关于模板构造函数甚至调用继承的模板构造函数的问题的重复 它具体是关于在 unique ptr 模板的类实例 的子类中调用继承的构造函数 问题 为了使代码更容易理解 我使用using在这个例子中 using B std unique p
  • 使用XSLT输出多个文件

    我正在尝试获取一个我发现的使用 XSLT 2 0 输出多个文件的示例 将 Saxon B 9 7 0 1 与 Java 1 6 一起使用时 出现以下错误 C Documents and Settings Administrator Desk
  • 以字节数组为键的ReduceByKey

    我想使用 RDD 对Tuple2