当前位置: 首页 > news >正文

SparkOnHive_列转行、行转列生产操作(透视和逆透视)

前言       

         行专列,列转行是数开不可避免的一步,尤其是在最初接触Hive的时候,看到什么炸裂函数,各种udf,有点发憷,无从下手,时常产生这t怎么搞,我不会啊?

        好吧,真正让你成长的,还得是甩给你一个需求,然后你自己绞尽脑汁的去实现。

列转行

SparkSQL中Hive_STACK函数列转行原理 

        Hive中的STACK函数,可以将多个列转换为多行,每行包含两个值:第一个值是指定的列名,第二个值是该列的值。

        stack(INT n, v1, v2, ..., vk)            

        -----把M列转换成N行,每行有M/N个字段,其中n必须是个常数

生产中的案例

        我以我在sparksql开发过程中遇到的实例为例,简单介绍一下用法。

        给一frame表:我这里只拿出一写字段和数据,不过足够演示了这个函数的用法了


+--------+--------+--------+--------+--------+
| fzl0000| fzl0100| fzl0200| max_fzl|   fzl  |
+--------+--------+--------+--------+--------+
|   0.9  |   0.8  |   0.7  |   0.6  |   0.5  |
+--------+--------+--------+--------+--------+

我要将上面的几列数据进行列转行,比较粗暴

HiveSQL代码

SELECT stack(4,'fzl0000', fzl0000,'fzl0100', fzl0100,'fzl0200', fzl0200,'max_fzl', max_fzl) AS (stat_time, mfzl)
FROM frame;

丢到集群跑程序然后我们得到的结果就出来

+--------------+------+
|stat_time     | mfzl  |
+--------------+------+
|   fzl0000    | 0.9  |
|   fzl0100    | 0.8  |
|   fzl0200    | 0.7  |
|   max_fzl    | 0.6  |
+--------------+------+

        注意,hue是不能直接跑这个代码的,impala也不行,会报错,不知道你的会不会报错。所以还是老老实实写spark程序搞吧。

        Spark代码

// 使用PIVOT函数进行列转行操作
val df_pivot = df.groupBy().pivot("stat_time").agg(expr("first(mfzl)"))

        你也可以在stack函数里头做一些函数操作比如一些转换啊啥的,自己去摸索一下吧。

行转列

        还是以上面的数据为例,行转列列转行就像我们学过的高数中的矩阵转置,也就是线性代数中的矩阵,这个可以了解一下,计算机底层皆是数学。

SparkSQL中Hive_PIVOT函数行转列原理

        一、PIVOT函数是Spark SQL中的一个聚合函数,用于将一列的值转换为多列。它将行数据中的某一列作为列名,将该列对应的值作为新的列的值,并将其他列的值保持不变,完成咱们得行转列操作,下图是一个很好的例子。

                                        图片来源:https://juejin.cn/post/6844903619171631117

    二、PIVOT函数接受三个参数:要进行聚合的列,要作为新列的列名,以及可选的要聚合的函数,这里头要聚合的列是把可能有重复的列聚合成一列。比如上图中多次重复出现的c1,c2,c3,我们要保证唯一值进行聚合,不能出现重复的列。

        dataFrame数据

+--------------+------+
|stat_time     | mfzl  |
+--------------+------+
|   fzl0000    | 0.9  |
|   fzl0100    | 0.8  |
|   fzl0200    | 0.7  |
|   max_fzl    | 0.6  |
+--------------+------+

行转列


+--------+--------+--------+--------+--------+
| fzl0000| fzl0100| fzl0200| max_fzl|   fzl  |
+--------+--------+--------+--------+--------+
|   0.9  |   0.8  |   0.7  |   0.6  |   0.5  |
+--------+--------+--------+--------+--------+

Spark代码

val transformedDF = df.groupBy().pivot("stat_time").agg(first("mfzl"))

部分参考文章

1、行转列参考文章:https://juejin.cn/post/6844903619171631117,这篇文章很好,讲解的条理清晰,忍不住推荐一波!

相关文章:

SparkOnHive_列转行、行转列生产操作(透视和逆透视)

前言 行专列,列转行是数开不可避免的一步,尤其是在最初接触Hive的时候,看到什么炸裂函数,各种udf,有点发憷,无从下手,时常产生这t怎么搞,我不会啊? 好吧&#xff…...

【人机交互 复习】第2章 Hadoop

一、概念 1.Hadoop 是一个能够对大量数据进行分布式处理的软件框架,并 且是以一种可靠、高效、可伸缩的方式进行处理的, 2.特点: 高可靠性,高效性,高可扩展性,高容错性 运行在Linux平台上,支持…...

国产自研编程语言“仓颉”来了!

在 6.21 召开的华为开发者大会(HDC2024)上,华为自研的国产编程语言“仓颉”终于对外正式发布了! 随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互…...

Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…...

从社交网络到元宇宙:Facebook的战略转型

随着科技的迅猛发展和数字化时代的深入,社交网络已不再局限于简单的信息交流和社交互动,而是逐步向更广阔、更深远的虚拟现实空间——元宇宙(Metaverse)转变。作为全球最大的社交网络平台之一,Facebook正在积极推动这一…...

程序猿大战Python——面向对象——继承进阶

方法重写 目标:掌握方法的重写。 当父类的同名方法达不到子类的要求,则可以在子类中对方法进行重写。语法: class 父类名(object):def 方法A(self):代码... class 子类名(父类名):def 方法A(self):代码... 例如,一起来完成&…...

【Linux基础】SSH登录

SSH简介 安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…...

经典机器学习方法(7)—— 卷积神经网络CNN

参考:《动手学深度学习》第六章 卷积神经网络(convolutional neural network,CNN)是一类针对图像数据设计的神经网络,它充分利用了图像数据的特点,具有适合图像特征提取的归纳偏置,因而在图像相…...

经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!

前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享经典面试题【作用域、闭包、变量提升】,并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家&#xff0…...

Dockerfile实战

Dockerfile是用来快速创建自定义镜像的一种文本格式的配置文件,在持续集成和持续部署时,需要使用Dockerfile生成相关应用程序的镜像。 Dockerfile常用命令 FROM:继承基础镜像MAINTAINER:镜像制作作者的信息,已弃用&a…...

常用的开源数据集网站

Kaggle(https://www.kaggle.com/datasets):Kaggle 是一个著名的数据科学竞赛平台,也提供了大量的开放数据集供用户下载和使用。UCI Machine Learning Repository(https://archive.ics.uci.edu/datasets)&am…...

html文本被木马病毒植入vbs脚本

我在公司服务器上写了一个静态html&#xff0c;方便导航&#xff0c;结果没过多久发现html文件被修改了&#xff0c;在</html>标签后加了这些代码。 注&#xff1a;WriteData 的内容很长&#xff0c;被我删掉了很多&#xff0c;不然没法提交这个提问 ​ <SCRIPT Lan…...

jsonl 文件介绍

jsonl文件介绍 什么是 jsonl 文件文件结构读取jsonl文件写入jsonl文件 什么是 jsonl 文件 jsonl&#xff08;json lines&#xff09;是一种文件格式&#xff0c;其中每一行都是一个单独的 json 对象。与常规的 json文件不同&#xff0c;jsonl文件在处理大量数据时具有优势&…...

反射机制详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Java从入门到精通 ✨特色专栏&#xff…...

【数据库】七、数据库安全与保护

七、数据库安全与保护 文章目录 七、数据库安全与保护安全性访问控制数据库安全性控制用户标识和鉴别存取控制自主存取控制(DAC)存取控制方法&#xff1a;授权与回收GRANT授权REVOKE回收 强制存取控制(MAC) MySQL的安全设置用户管理1.创建登录用户2.修改用户密码3.修改用户名4.…...

卡尔曼滤波-剔除异常值的影响

二郎在看论文的时候&#xff0c;发现了一个针对卡尔曼滤波过程中&#xff0c;测量向量出现误差导致滤波发散的处理方法。 该方法也可以扩展到其他问题中使用&#xff0c;所以二郎在这里写一下。 论文原文&#xff1a;https://www.mdpi.com/1424-8220/20/17/4710 论文翻译对应…...

Java程序之动物声音“模拟器”

题目&#xff1a; 设计一个“动物模拟器”&#xff0c;希望模拟器可以模拟许多动物的叫声和行为&#xff0c;要求如下&#xff1a; 编写接口Animal&#xff0c;该接口有两个抽象方法cry()和getAnimalName()&#xff0c;即要求实现该接口的各种具体的动物类给出自己的叫声和种类…...

jieba中文分词器的使用

Jieba 是一个中文分词的第三方库&#xff0c;主要用于对中文文本进行分词。分词是将文本分割成一个个词语的过程&#xff0c;这在中文文本处理中尤为重要&#xff0c;因为中文不像英文那样有明显的空格来分隔词语。Jieba 的分词算法可以实现精确分词、全模式分词和搜索引擎模式…...

【杂记-浅谈OSPF协议中的RouterDeadInterval】

OSPF协议中的RouterDeadInterval 一、RouterDeadInterval概述二、设置RouterDeadInterval三、RouterDeadInterval的重要性 一、RouterDeadInterval概述 RouterDeadInterval&#xff0c;即路由器死区间隔&#xff0c;它涉及到路由器如何在广播网络上发现和维护邻居关系。Router…...

Django 模版变量

1&#xff0c;模版变量作用 模板变量使用“{{ 变量名 }}” 来表示模板变量前后可以有空格&#xff0c;模板变量名称&#xff0c;可以由数字&#xff0c;字母&#xff0c;下划线组成&#xff0c;不能包含空格模板变量还支持列表&#xff0c;字典&#xff0c;对象 2&#xff0c;…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...