这篇文章将记录如何使用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()方法--- 行转列相关推荐

  1. Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...

  2. oracle列转行 多个字段_oracle 行转列~列转行(几种方法)

    工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as( select '四川省' nation ...

  3. oracle 行转列后列名,Oracle 多行转多列,列值转为列名

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...

  4. Mysql 多行多列合并并排序(看到最后) GROUP_CONCAT()

    项目需要合并列,想用Mybatis查出来,Java遍历整合.想了想太耗时,不如一条sql来的痛快. 多行多列合并排序:实现逻辑 ,先合并列,并排序,然后合并所有行. group_concat()函数  ...

  5. Oracle 行转列——列转行

    工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as( select '四川省' nation ...

  6. hive lateral view explode列拆分与行转列用法

    在日常工作中,我们在处理数据时,会遇到某个列存在多个数据的情况,如果想拿到这个列里面每个数据进行后续处理的话,这种情况下有两种处理方式: 第一种:如果这个列多个数据是固定数目,可以使用split切分 ...

  7. php html转成数组,PHP_php将HTML表格每行每列转为数组实现采集表格数据的方法,本文实例讲述了php将HTML表格每 - phpStudy...

    php将HTML表格每行每列转为数组实现采集表格数据的方法 本文实例讲述了php将HTML表格每行每列转为数组实现采集表格数据的方法.分享给大家供大家参考.具体如下: 下面的php代码可以将HTML表 ...

  8. Pandas常见的数据过滤方法、通过列条件筛选行数据

    Pandas常见的数据过滤方法.通过列条件筛选行数据 不废话了,直接看代码吧: 一般情况下,前面5种就覆盖了绝大多数需求 import pandas as pd import numpy as npd ...

  9. python读取excel部分值存入另一个excel-python3读取excel文件只提取某些行某些列的值方法...

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

最新文章

  1. 算法设计思想(1)— 穷举法
  2. 台积电2nm工艺重大突破!
  3. 为什么要使用Handler
  4. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
  5. 重装机兵java_重装机兵之机甲咆哮
  6. 交换机的三种转发模式
  7. SQL Server数据库查询优化【转】
  8. 【图像处理】sobel边缘检测的实现
  9. Windows取证分析基础知识大全
  10. git 拉取子目录 child-dir (父目录为:parent-dir)
  11. realize与recognize辨析
  12. HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/tqdm-4.64.0-py39h06
  13. word的大表格中自动换页
  14. Linux开机自动获取本机公网IP并发送至指定邮箱
  15. ADPCM 编码 及WAV解析 及实例
  16. androID程序!BAT大厂面试基础题集合,附带学习经验
  17. Itext 将html 字符串生成PDF 方法
  18. php支付接口签名,php实现支付接口签名验证
  19. 跟我一起写 Makefile -- 陈皓
  20. IATF 16949术语定义

热门文章

  1. 小米VS华为:水军?黑稿?到底是谁黑了谁?
  2. 嵌入式开发之1553B协议
  3. Ardunio开发实例-TCS3200颜色传感器
  4. stm32单片机使用串口通信连接GY-33颜色传感器完成对颜色的识别并且打印出其颜色和对应的RGB值
  5. 什么是AMF?AMF0和AMF3
  6. Abnova ABCB10(人)重组蛋白说明书
  7. 2013年01月29日
  8. 区块链技术用解决拜占庭将军问题_区块链设计核心难题:拜占庭将军问题
  9. JavaScript-T2
  10. 港大计算机专业世界排名,香港大学优势专业及优势专业排名(QS世界排名)