Hadoop/Hive Collect_list 不包含重复项

2024-03-06

根据该帖子,Hive 0.12 - Collect_list https://stackoverflow.com/questions/6445339/collect-set-in-hive-keep-duplicates,我试图找到 Java 代码来实现 UDAF,该 UDAF 将完成此或类似的功能,但没有重复序列。

例如,collect_all()返回一个序列A, A, A, B, B, A, C, C我想要序列A, B, A, C回。连续重复的项目将被删除。

有谁知道 Hive 0.12 中的一个函数可以完成或已经编写了自己的 UDAF?

一如既往,感谢您的帮助。


不久前我遇到了类似的问题。我不想写一个完整的UDAF所以我只是做了一个组合砖房收集 https://github.com/klout/brickhouse/blob/master/src/main/java/brickhouse/udf/collect/CollectUDAF.java和我自己的UDF。假设你有这个数据

id  value
1   A
1   A
1   A
1   B
1   B
1   A
1   C
1   C
1   D
2   D
2   D
2   D
2   D
2   F
2   F
2   F
2   A
2   W
2   A

my UDF was

package com.something;

import java.util.ArrayList;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class RemoveSequentialDuplicates extends UDF {
    public ArrayList<Text> evaluate(ArrayList<Text> arr) {
        ArrayList<Text> newList = new ArrayList<Text>();
        newList.add(arr.get(0));
        for (int i=1; i<arr.size(); i++) {

            String front = arr.get(i).toString();
            String back = arr.get(i-1).toString();

            if (!back.equals(front)) {
                newList.add(arr.get(i));
            }
        }
        return newList;
    }
}

然后我的查询是

add jar /path/to/jar/brickhouse-0.7.1.jar;
add jar /path/to/other/jar/duplicates.jar;

create temporary function remove_seq_dups as 'com.something.RemoveSequentialDuplicates';
create temporary function collect as 'brickhouse.udf.collect.CollectUDAF';

select id
  , remove_seq_dups(value_array) no_dups
from (
  select id
    , collect(value) value_array
  from db.table
  group by id ) x

output

1   ["A","B","A","C","D"]
2   ["D","F","A","W","A"]

顺便说一句,内置collect_list不必按照它们分组的顺序保留列表的元素;砖房collect将要。希望这可以帮助。

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

Hadoop/Hive Collect_list 不包含重复项 的相关文章

随机推荐

  • WSL (Ubuntu):如何从 bash 终端在浏览器中打开 localhost

    我正在尝试打开http localhost http localhost在 WSL bash 终端的 任何 浏览器中 到目前为止我已经尝试过 如何从 URL localhost 3000 的终端打开 Google Chrome https
  • iOS 的日志框架? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 iOS 是否有一个日志框架可以帮助开发人员诊断应用程序崩溃 您可能喜欢 伐木工人 https gith
  • Bootstrap 网格列相互重叠

    我对 Bootstrap 的网格布局和其中的列重叠有疑问 我不确定问题到底是什么 任何建议将不胜感激 谢谢 div class container div class row div class col md 6 img src conte
  • 错误提示“.class 文件中的版本错误”

    我使用了JSP代码并在tomcat5 5服务器下执行了相同的操作 它工作被罚款 现在我已经将相同的代码复制到其他系统的tomcat服务器下 但是在提交该 jsp 文件时 收到以下错误 导致错误的原因可能是什么 请指教 root cause
  • 使 d3.js 可视化布局响应式的最佳方法是什么?

    假设我有一个直方图脚本 可以构建 960 500 svg 图形 我如何使其响应 以便调整图形宽度和高度是动态的
  • 如何快速学习Java RMI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 Java 应用程序 我已经开发了一两年了 我想创建一组非常简单的接口 以后可能会增加复杂性 我可以使用它从另一个 JVM 例
  • Jmeter - 如何向计数器添加前缀。类似于随机变量

    目前 在随机变量中 我可以在变量的输出格式中添加前缀或后缀 然而 这个很好的功能不适用于简单的计数器控制器 每次使用变量时连接 string counter 对我来说并不是一个好的选择 因为我经常这样做 有没有办法以随机变量的方式实现前缀
  • 对内置数据类型使用前向声明

    我明白 只要有可能 我们就应该使用前向声明而不是包含来加快编译速度 我有课Person像这样 pragma once include
  • 如何将 TWSocket 的 OnDataAvailable() 事件推送到 Delphi 6 应用程序中的后台线程?

    我有一个 Delphi 6 应用程序 它使用 ICS 组件套件进行套接字通信 我有自己的服务器套接字 VCL 组件 当新会话可用时 它会创建客户端 TWSocket 套接字 我创建的客户端套接字确实将 Multithreaded 属性设置为
  • 如何一起使用SparkSession和StreamingContext?

    我正在尝试从本地计算机 OSX 上的文件夹流式传输 CSV 文件 我将 SparkSession 和 StreamingContext 一起使用 如下所示 val sc SparkContext createSparkContext spa
  • 我应该使用哪些 Maven 工件来导入 PowerMock?

    我需要添加哪些罐子到我的pom xml让 PowerMock 与 Mockito 一起工作 我有以下依赖项
  • Google.Apis.Requests.RequestError 需要登录 [401] 消息[需要登录] 位置

    因此 我从 Nuget 下载了 Cloud Storage 的 NET 客户端 Google Apis Storage v1 版本 1 8 1 10 使用开发人员控制台创建了一个项目 生成了 API 密钥 启用了计费 创建了一个存储桶 但是
  • 如何绑定 ListBoxItem 的索引

    我想将列表框项目的 z 索引绑定到它们的索引 理想情况下 我们会有
  • Clojure、方面、Defprotocol、Defrecord

    defprotocol IAnimal IAnimal report o println type o reporting n inner report o println type o out n defrecord Dog IAnima
  • 如何将 JSON 转换为 CSV 格式并存储在变量中

    我有一个可以在浏览器中打开 JSON 数据的链接 但不幸的是我不知道如何阅读它 有没有办法使用 JavaScript 将这些数据转换为 CSV 格式并将其保存在 JavaScript 文件中 数据如下 count 2 items title
  • 纹理不绘制

    我想在屏幕上绘制图像 但我得到的是黑色方块 但上面没有纹理 图像路径正确并已加载 因为矩形具有正确的大小 我有一个单独的类用于加载名为 Texture 的纹理 还有一个用于绘制名为 Sprite 的纹理的类 这是代码 Class Textu
  • 如何向用户请求联系人访问权限,然后建立并打开联系人?

    好的 我联系了我的手机 除了两件事外 它运行得很好 首先 它第一次失败 因为它要求我访问联系人 我怎样才能使它在用户授予对联系人的访问权限后添加它 其次 有没有办法打开联系人 以便用户在建立后可以查看它 这就是我所做的 IBAction a
  • 使 Horizo​​ntalScrollView 的子级与屏幕一样大?

    我解决这个问题的方法是为子视图创建一个自定义视图 然后为自定义视图重写 onMeasure 新的 onMeasure 将宽度和高度设置为尽可能大 问题是当你显示软键盘时and旋转手机 随着方向的改变和键盘的显示 onMeasure 将 最大
  • 如何读取用户的单个字符?

    有没有一种方法可以从用户输入中读取单个字符 例如 他们在终端按下一个键 然后返回 有点像getch 我知道 Windows 中有一个功能 但我想要跨平台的功能 以下是 ActiveState Recipes 站点的链接 其中介绍了如何在 W
  • Hadoop/Hive Collect_list 不包含重复项

    根据该帖子 Hive 0 12 Collect list https stackoverflow com questions 6445339 collect set in hive keep duplicates 我试图找到 Java 代码