大数据(8n)图解Spark行转列pivot数据透视表

【spark】行列互转的思考 本文基于一个具体的案例,介绍spark中case when,stack,lateral view explode,pivot的用法,并做一些性能上的比较 一、背景 群里有个小伙伴出了一道题目是行转列(多行数据转成多列数据) 如图,把上表的数据通过sql变成下表的数据 当然实现方法还是比较多的,我也想了几种方式,并随便搞了2.5亿条数据测试下性能(表格式是text,每个文件块大小都很均匀) 二、实现方法 不同引擎里,会有不同的函数或者语法做行列的转换,我这里就针对spark引擎. 阅读详情

1、透视

1.1、SQL

SELECT * FROM t
PIVOT (SUM(d) FOR c IN ('c1' as c1,'c2'as c2,'c3' as c3));

1.2、Spark

import org.apache.spark.sql.SparkSession
import org.apache.spark.{SparkConf, SparkContext}
//创建SparkContext对象
val c0: SparkConf = new SparkConf().setAppName("a0").setMaster("local")
val sc: SparkContext = new SparkContext(c0)
//创建SparkSession对象
val c1: SparkConf = new SparkConf().setAppName("a1").setMaster("local")
val spark: SparkSession = SparkSession.builder().config(c1).getOrCreate()
//隐式转换支持
import spark.implicits._
//建多个表
sc.makeRDD(Seq(
  ("r1", "c1", 1),
  ("r1", "c2", 2),
  ("r1", "c3", 3),
  ("r2", "c1", 4),
  ("r2", "c2", 5),
  ("r2", "c3", 6),
  ("r2", "c3", 7),
)).toDF("r", "c", "d").createTempView("t")
//结果展示
spark.sql(
  """
    |SELECT * FROM t
    |PIVOT (SUM(d) FOR c IN ('c1' as c1,'c2'as c2,'c3' as c3));
    |""".stripMargin).show()

2、逆透视

2.1、SQL

SELECT
    r,
    STACK(
        3,
        'c1',c1,
        'c2',c2,
        'c3',c3
    ) AS (c,d)
FROM t;

2.2、Spark

import org.apache.spark.sql.SparkSession
import org.apache.spark.{SparkConf, SparkContext}
//创建SparkContext对象
val c0: SparkConf = new SparkConf().setAppName("a0").setMaster("local")
val sc: SparkContext = new SparkContext(c0)
//创建SparkSession对象
val c1: SparkConf = new SparkConf().setAppName("a1").setMaster("local")
val spark: SparkSession = SparkSession.builder().config(c1).getOrCreate()
//隐式转换支持
import spark.implicits._
//建多个表
sc.makeRDD(Seq(
  ("r1", 1, 2, 3),
  ("r2", 4, 5, 13),
)).toDF("r", "c1", "c2", "c3").createTempView("t")
//结果展示
spark.sql(
  """
    |SELECT
    |    r,
    |    STACK(
    |        3,
    |        'c1',c1,
    |        'c2',c2,
    |        'c3',c3
    |    ) AS (c,d)
    |FROM t;
    |""".stripMargin).show()

3、Appendix

en🔉cn
pivotˈpɪvətn. 枢轴;中心点;中心;旋转运动;中锋;(篮球)持球转身策应
v. 以……为中心旋转;在枢轴上转动
stackstækn. (整齐的)一堆;(尤指工厂的)大烟囱;堆栈;
v. (使)放成整齐的一叠
基于Spark SQL的数据探索 掌握Spark SQL的探索性数据分析技术。1、进行探索性数据分析。   2、探索性数据可视化。   3、对数据进行采样。   4、创建数据透视表。Exploratory Data Analysis (EDA),或Initial Data Analysis (IDA),是一种数据分析方法,试图最大限度地洞察数据。这包括评估数据的质量和结构,计算汇总或描述性统计,以及绘制适当的图表。它可以揭示底层结构,并建议如何建模数据。此外,EDA帮助我们检测数据中的异常值、错误和异常,并且决定如何处理这些数据通常比其他更 阅读详情

相关推荐

Spark PIVOT & UNPIVOT, 行转列和列转行

测试数据 name course score Darren Chinese 71 Darren Math 81 Darren English 91 Jonathan Chinese 72 Jonathan Math 82 Jonathan English 92 Tom Chinese 73 行转列 语法 SELECT xxx FROM table_test

三丰的专栏 3022

Java篇运算符(下)

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!721)][外链图片转存中…(img-w0EMacSQ-1713171821722)]

2401_84048521的博客 962

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 638

在Spark中使用Pivot重塑数据

本文来自Andrew Ray博士在Silicon Valley Data Science网站上发表的博客,Andrew Ray博士对大数据有着浓厚的兴趣并且有着丰富的Spark使用经验。Andrew同样也是一名活跃的Apache Spark源码贡献者,其源码贡献主要集中在Spark SQL和GraphX组件上。透视(pivot)数据功能是Spark 1.6的众多新增特性之一,它通过使用DataFr...

zhong930的博客 4622

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 528

FFmpeg魔改指南:让RTMP协议完美兼容H265的三种方法(含SRS适配技巧)

本文详细介绍了三种让RTMP协议兼容H265编码的FFmpeg魔改方案,包括基于官方补丁的标准改造、Intel的SVT-HEVC集成方案以及金山云的自定义扩展方案。文章重点解析了各方案的实现原理与适配技巧,并提供了在SRS 6.0服务器上进行深度配置和性能调优的完整实战指南,帮助开发者解决H265推流至传统RTMP服务器的兼容性问题。

weixin_29290947的博客 194

Scala spark dataframe pivot postgresql数据库读取数据创建透视表时丢失数据问题解决方法

然后呢,数据丢失,就是找不到,我怎么也理解不了,网上也没有说,我不断查找不断试验,最终发现了一个大坑,Scala spark读取postgresql数据的char类型时会把空格也读进来,所以就找不到“buy”和“like”,找到的是“buy ”和“like ”,所以想建立透视表,我们需要把空格也加上,然后再换dataframe表头才行。然后我想建立一个透视表,以userid和modelid进行分组,分别统计buy和like的cishu,于是我这样写。

fprogramer的博客 329

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

pyspark.sql两种行转列pivot和collect用法比较及concat_ws 组合使用

pyspark.sql两种行转列pivot和collect用法比较及concat_ws 组合使用

qq_34669699的博客 989

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 407

内存泄漏系列专题分析之二十一:高通相机CamX内存泄漏&内存占用分析--GPU内存拆解

通过上述debug方式,可以看到patch补丁可以顺利debug各种ION内存分布,可以通过它分析ION内存占用问题。同时我们还可以分析GPU内存泄漏问题,同样的方式可以看到所有的GPU内存分布,如果某个GPU内存持续增长,就极有可能内存泄漏,然后更具堆栈信息去分析代码,并解决GPU内存泄漏问题。!!

451

spark中怎么实现行列转换

函数可以帮助你重新排列数据,将某些行值作为列,并根据指定的聚合函数对这些值进行汇总。函数可用于将包含数组的列拆分成多行,每个数组元素对应一行数据。列中的数组元素拆分成多行,每个员工的每个部门对应一行,并保留了原始的。列的值(A 和 B)转换为两列,并对每个日期的。在 Spark SQL 中,你可以使用。在 Spark SQL 中,你可以使用。列中的值转换为行,并保留对应的。进行分组,并且对应每个日期的。假设你有一个包含以下数据的表。列中的值转换为列,可以按照。假设你有一个包含以下数据的表。

weixin_38290062的博客 1957

SAP Joule for Developers 全景解析:从 ABAP 到 SAP Build 的一体化开发者 AI 能力

SAP Joule for Developers是一套内嵌于SAP开发工具的设计时AI能力,专为提升SAP开发者效率而设计。它支持自然语言生成应用与自动化流程,帮助理解优化代码,并嵌入单元测试和质量保障功能。Joule深度集成ABAP开发环境,同时服务于Java、JavaScript和低代码开发,覆盖CAP数据模型、UI5/Fiori生成、ABAP代码补全与重构等场景。通过斜杠命令和上下文操作,开发者可在不改变现有平台的前提下,显著提升开发效率和质量。典型案例包括快速构建CAP应用和ABAP Cloud迁移

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 494

Spark核心技术原理透视一(Spark运行原理)

Application多个job多个Stage:Spark Application中可以因为不同的Action触发众多的job,一个Application中可以有很多的job,每个job是由一个或者多个Stage构成的,后面的Stage依赖于前面的Stage,也就是说只有前面依赖的Stage计算完毕后,后面的Stage才会运行。负责将作业拆分成不同阶段的具有依赖关系的多批任务;指的是在集群上获取资源的外部服务,常用的有:Standalone,Spark原生的资源管理器,由Master负责资源的分配;

m0_67401606的博客 738

日常工作记录---在虚拟机中进行slam建图

   今天是10月24号,首先祝各位程序员们节日快乐!!!    最近一周由于实习的原因,对ROS的探索学习,停滞了一段时间,所以今天也就没什么大的进展,本篇文章仅仅记录一下,我在虚拟机中进行slam建图可行性验证的过程,本篇文章同样使用古月学院《如何在Gazebo中实现阿克曼转向车的仿真》的课程资料来进行验证    下面各条之间并没有严格的顺序关系,每一条都是独立的,都是我在验证过程中的经验或者记录:    1、在运行roslaunch bringup racecar_gazebo_rviz.lau

慕羽★的博客 4826

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PySpark数据透视表操作指南

在 PySpark 中,可以使用pivot()方法实现类似 Excel 数据透视表的功能。

m0_63322122的博客 501

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spark小技巧之pivot

最近在用spark处理数据的时候,遇到了这样一种需求: 我想统计每个城市在工作日和周末早高峰、晚高峰、夜高峰和普通时间段的订单数,并且早高峰、晚高峰、夜高峰和普通时间段分别占一列。 原始文件CSV文件的内容如下图所示: peak_type代表时间段,其中morning_peak代表早高峰、evening_peak代表晚高峰、nignt_peak代表夜高峰、normal代表正常时间段。 这个问...

u010149947的博客 2329

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

使用Spark轻松做数据透视(Pivot)

spark从1.6开始引入,到现在2.4版本,pivot算子有了进一步增强,这使得后续无论是交给pandas继续做处理,还是交给R继续分析,都简化了不少。大家无论在使用p...

麒思妙想 3877

SQL、Pandas和Spark:如何实现数据透视表?

导读数据透视表是一个很重要的数据统计操作,最有代表性的当属在Excel中实现(甚至说提及Excel,个人认为其最有用的当属三类:好用的数学函数、便捷的图表制作以及强大的数据透视表功能)。所...

小数志 430

Sparksql行列转换

首先创建一个测试数据 from pyspark import SparkConf, SparkContext from pyspark.sql import SparkSession spark=SparkSession.builder.appName('TestAPP') .enableHiveSupport() .getOrCreate() df = spark.createDataFrame([('math','alice',88), ('chinese','alice',92

jin_tmac's studio 3584

spark场景功能实现

1. 字符串累加2 行列转换3 数据填充4 设定变量5 生成id7 lateral view使用1. lateral view级联使用8 分组聚合9 数据透视Spark SQL 的 PIVOT 子句用于数据透视。根据特定的列值获得聚合值,这些值将转换为 SELECT 子句中使用的多个列.10 抽样数据tablesample是对表采样(先采样后过滤), 会导致扫全表;因此, 使用时最好先限定分区和过滤条件获得临时结果表, 再对临时表进行采样;11 选择列12 分析函数13 去重统计。

盛源的博客 1996

Spark实现行列转换pivot和unpivot

背景 做过数据清洗ETL工作的都知道,行列转换是一个常见的数据整理需求。在不同的编程语言中有不同的实现方法,比如SQL中使用case+group,或者Power BI的M语言中用拖放组件实现。今天正好需要在pyspark中处理一个数据行列转换,就把这个方法记录下来。 首先明确一下啥叫行列转换,因为这个叫法也不是很统一,有的地方叫转置,有的地方叫透视,不一而足。我们就以下图为例,定义如下: 从左边...

weixin_34388207的博客 768

SparkSQL | 行转列与列转行

df = spark.createDataFrame([ {'id': 1, u'姓名': u'张三', u'分数': 88, u'科目': u'数学'}, {'id': 2, u'姓名': u'李雷', u'分数': 67, u'科目': u'数学'}, {'id': 3, u'姓名': u'宫九', u'分数': 77, u'科目': u'数学'}, {'id'...

小哲数据 5647

常见算子使用_案例|使用 spark Pivot 处理复杂的数据统计需求

Pivot 算子是 spark 1.6 版本开始引入的,在 spark2.4版本中功能做了增强,还是比较强大的,做过数据清洗ETL工作的都知道,行列转换是一个常见的数据整理需求。spark 中的Pivot 可以根据枢轴点(Pivot Point) 把多行的值归并到一行数据的不同列,这个估计不太好理解,我们下面使用例子说明,看看pivot 这个算子在处理复杂数据时候的威力。使用Pivot ...

weixin_31951319的博客 652

Spark SQL 从入门到精通 - Spark SQL 行转列、列转行案例

Spark PIOVT、UNPIOVT 方案案例

zholeiv5 2524
上一篇: 使用Spark模拟HIVE-SQL环境【原创首发】
下一篇: Redis极速入门
小基基o_O
博客等级 码龄9年 4413粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值