spark之explode()方法--- 行转列
这篇文章将记录如何使用spark DataFrame将列数据展开,这里使用的是explode方法
将对List数据和Map分别给出展开的例子:
在stackoverflow 中的问题是这样的:
https://stackoverflow.com/questions/37391241/how-to-explode-columns/37392793#37392793
加入我们有这种数据:
name | age | interest |
---|---|---|
A | 20 | 篮球,羽毛球 |
B | 22 | 游泳,慢跑,写代码 |
… | … | …. |
我们希望得到这种格式的:
name | age | interest |
---|---|---|
A | 20 | 篮球 |
A | 20 | 羽毛球 |
B | 22 | 游泳 |
B | 22 | 慢跑 |
B | 22 | 写代码 |
… | … | …. |
那么使用java如何操作呢? 一种是使用RDD啊什么的一个一个的转,但是强大的spark用提供了一个强大的explode方法
首先看下explode官方给的文档吧~~
可以知道 explode方法可以从规定的Array或者Map中使用每一个元素创建一列
df = df.withColumn("entityPair", functions.explode(functions.col("entityList")));
这里explode中传入的是需要进行展开的列名,withColun中的第一个参数是展开后的新列名。
其中entityList必须是一个List。例如上面给的数据例子,在爱好哪一行,数据类型应该是这样的
List<String> : {"羽毛球","篮球"}
文档中还说了可以将map数据展开,那么如何进行呢?
假设我们有这样一个map:
url | data |
---|---|
www.xxx.com | map(key1->value1, key2->value2) |
www.aaa.com | map(key3->value3) |
… | … |
我们需要将map中所有的key和value展开,所有的key为一列,所有的value为一列
得到如下结构:
url | key | value |
---|---|---|
www.xxx.com | key1 | value1 |
www.xxx.com | key2 | value2 |
www.aaa.com | key3 | value3 |
… | … | … |
下面给出java 方法:
df = df.select(functions.explode(functions.col("data"))).toDF("key", "value");
可以看到,这里和List有一个不同的地方时需要在explode后接一个toDF操作,是因为map进行展开操作后自然会得到两列,我们需要将其转化为DataFrame格式的两列,列名可以自己指定。
————————————————
spark之explode()方法--- 行转列相关推荐
- Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数
前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...
- oracle列转行 多个字段_oracle 行转列~列转行(几种方法)
工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as( select '四川省' nation ...
- oracle 行转列后列名,Oracle 多行转多列,列值转为列名
前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...
- Mysql 多行多列合并并排序(看到最后) GROUP_CONCAT()
项目需要合并列,想用Mybatis查出来,Java遍历整合.想了想太耗时,不如一条sql来的痛快. 多行多列合并排序:实现逻辑 ,先合并列,并排序,然后合并所有行. group_concat()函数 ...
- Oracle 行转列——列转行
工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as( select '四川省' nation ...
- hive lateral view explode列拆分与行转列用法
在日常工作中,我们在处理数据时,会遇到某个列存在多个数据的情况,如果想拿到这个列里面每个数据进行后续处理的话,这种情况下有两种处理方式: 第一种:如果这个列多个数据是固定数目,可以使用split切分 ...
- php html转成数组,PHP_php将HTML表格每行每列转为数组实现采集表格数据的方法,本文实例讲述了php将HTML表格每 - phpStudy...
php将HTML表格每行每列转为数组实现采集表格数据的方法 本文实例讲述了php将HTML表格每行每列转为数组实现采集表格数据的方法.分享给大家供大家参考.具体如下: 下面的php代码可以将HTML表 ...
- Pandas常见的数据过滤方法、通过列条件筛选行数据
Pandas常见的数据过滤方法.通过列条件筛选行数据 不废话了,直接看代码吧: 一般情况下,前面5种就覆盖了绝大多数需求 import pandas as pd import numpy as npd ...
- python读取excel部分值存入另一个excel-python3读取excel文件只提取某些行某些列的值方法...
今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...
最新文章
- 算法设计思想(1)— 穷举法
- 台积电2nm工艺重大突破!
- 为什么要使用Handler
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
- 重装机兵java_重装机兵之机甲咆哮
- 交换机的三种转发模式
- SQL Server数据库查询优化【转】
- 【图像处理】sobel边缘检测的实现
- Windows取证分析基础知识大全
- git 拉取子目录 child-dir (父目录为:parent-dir)
- realize与recognize辨析
- HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/tqdm-4.64.0-py39h06
- word的大表格中自动换页
- Linux开机自动获取本机公网IP并发送至指定邮箱
- ADPCM 编码 及WAV解析 及实例
- androID程序!BAT大厂面试基础题集合,附带学习经验
- Itext 将html 字符串生成PDF 方法
- php支付接口签名,php实现支付接口签名验证
- 跟我一起写 Makefile -- 陈皓
- IATF 16949术语定义