目标:
Hive中的数据, 按照每个类目用户的总流量大小排序.
现在需要取出每个类目的top10.
Hive中使用order by categoryId, traffic desc来对数据排序, 但没办法对每个categoryId取top. 因为limit是对整个最终结果产生影响, 所以不能用limit来做.
最后决定导出文本, 使用awk来取top10.
脚本:
hive -e "select category, traffic from log_table where pt=$yesterday order by category, traffic desc" | awk '{if(cate[$1] < 10){cate[$1]++;print $0}}' > result.txt
这样就能够按照category取top. 缺点是对数据量大小有要求, 太大可能不行, 不过是线性的.
最开始数据只是单纯用select导出, 所以需要先用sort做一个大排序, 然后awk, 最后再sort一下:
sort -k 2 -r -n result.txt | awk '{if(cate[$1] < 10){cate[$1]++;print $0}}' | sort -k1 -k2 -r
因为有排序, 所以对数据量很敏感, 最后决定先在Hive中排好序再说, 于是就这样搞了.
分享到:
相关推荐
根据给定的文件信息,我们可以总结并扩展出以下几个重要的Linux知识点: ### 1. Linux的“壳”(Shell) #### 定义与作用 - **Shell** 是连接用户与Linux内核之间的桥梁,允许用户通过命令行接口与操作系统进行...
- **时间相关参数**:如按最近访问时间、修改时间等查找文件。 - **用户和用户组相关参数**:根据所有者或所属组查找文件。 - **文件权限及名称相关参数**:根据权限或文件名模式查找文件。 #### 四、文件|目录的...
无论是服务器运维、开发环境搭建还是日常的文件管理,掌握一系列基本且实用的Linux命令都是必不可少的。本文将详细介绍一些常见的Linux命令及其用法,帮助读者更好地理解和运用这些命令。 #### 一、文件操作命令 1...
在系统管理和监控方面,`top`和`htop`提供实时的进程状态和资源使用情况,而`ps`则用于列出系统中的进程。`free`显示内存使用情况,`df`和`du`分别用于查看磁盘空间使用状况和具体文件或目录的大小。`netstat`用于...
- `ls -S`:按文件大小降序排列。 - `ls -r`:逆向排序,例如最新文件排在最后。 - `ls -u`:按最近访问时间排序。 - **cd**:更改当前工作目录。 - `cd <directory>`:进入指定目录。 - `cd ..`:返回上一级...
在Linux操作系统中,掌握一些基本的命令行工具是至关重要的,特别是对于文件和目录的管理。以下是一些关于Linux文件处理的重要命令,这些都是Linux初学者和专业人士必须掌握的基础知识。 1. **ls**:用于列出目录中...
`paste` 命令用于将多个文件的内容按列合并到一起。例如: ``` paste file1 file2 > combined_file ``` #### 26. cat - 显示文件内容 `cat` 命令用于显示文件内容。其他用于显示文件内容的命令还包括 `less` 和 `...
Linux命令可以按功能分类,如文件管理、用户管理、进程管理、网络管理等。文件管理相关的命令包括文件创建、删除、查看、移动、拷贝、编辑等。例如,"cp"命令用于复制文件或目录,"rm"命令用于删除文件或目录,"mv...
1. **ls**:列出目录内容,是最基本的命令之一,可以查看当前目录下的文件和子目录。 2. **cd**:切换目录,用于在文件系统中移动。 3. **pwd**:显示当前工作目录,确认你所在的路径。 4. **touch**:创建新文件或...
"Linux命令大全.chm"就是这样一个包含大量Linux命令信息的CHM文件,用户可以像使用电子词典一样查阅其中的内容。 这个文档通常会按照命令的首字母排序,包括但不限于以下几大类命令: 1. 文件和目录管理: - `cd`...
通过不同的选项,如 `-a` 显示所有文件(包括隐藏文件),`-l` 以详细格式显示,`-t` 按修改时间排序,`-S` 按文件大小排序,`-h` 以人类可读的格式显示大小,`-r` 反向排序,`-R` 递归列出子目录。例如,`ls -alrR ...
1. **ls**:用于列出目录内容,通过添加不同参数可以显示隐藏文件、按时间排序等。 2. **cd**:切换当前工作目录,是我们在Linux中移动的常用命令。 3. **pwd**:显示当前所在的工作目录,帮助确认当前位置。 4. **...
4. **`top`** 命令:显示Linux系统中进程的实时视图,可以按照CPU使用率或内存使用率进行排序。如: - `top -u` 按CPU使用率排序进程。 - `top -o mem` 按内存使用率排序进程。 - `top -n 5` 只显示前五个进程。 ...
Linux是一个强大的操作系统,它提供了大量的命令行工具和指令来执行各种各样的任务。以下是Linux中一些最常用的命令及其知识点的详细介绍。 **文件操作** - **cat**: 用于查看文件内容,创建文件,文件合并,追加...
在IT领域,Linux操作系统是开发者和系统管理员的重要工具,尤其对于初学者来说,掌握基本的Linux命令行操作至关重要。"Linux_command.rar" 提供了一个针对Linux初学者的学习资源,主要聚焦于60个常用命令的教学,...
- `sort`:对文本文件中的行进行排序。 - `uniq`:去除重复的行。 - `sed`:流编辑器,用于文本替换、删除、插入等操作。 3. **系统管理命令** - `sudo`:以其他用户身份执行命令。 - `top`:实时显示系统资源...
- "ls" 命令列出目录下的文件和子目录。 - "mkdir" 命令创建新目录。 - "rmdir" 命令删除空目录。 - "cp" 命令用于复制文件或目录。 - "mv" 命令可以移动文件或目录,也可以用来重命名。 - "rm" 命令删除文件或目录...
Linux操作系统以其强大的命令行工具而著称,在Linux系统中,命令行界面(CLI)是进行系统管理、文件操作、进程监控等日常任务的基石。本文将详细介绍Linux系统中常见的60个必备命令,这些命令覆盖了从基本的文件和...