pyspark dataframe列的合并与拆分

解决sparksql两个DataFrame合并后出现两列相同的情况 我们经常使用spark时会对表合并 val data1 = Seq( | ("1", "ming", "hlj"), | ("2", "tian", "jl"), | ("3", "wang", "ln"), | ("4", "qi", "bj"), | ("5", "sun", "tj") | ).toDF("useid", "name", "live") val ... 阅读详情

使用Spark SQL在对数据进行处理的过程中,可能会遇到对一列数据拆分为多列,或者把多列数据合并为一列。这里记录一下目前想到的对DataFrame列数据进行合并和拆分的几种方法。

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("local") \
    .appName("dataframe_split") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

sc = spark.sparkContext
df = spark.read.csv('hdfs://master:9000/dataset/dataframe_split.csv', inferSchema=True, header=True)
df.show(3)

原始数据如下所示

  • dataframe列数据的分割

from pyspark.sql.functions import split, explode, concat, concat_ws
df_split = df.withColumn("s", split(df['score'], " "))
df_split.show()

 

  • dataframe列数据的拆分

zipWithIndex:给每个元素生成一个索引 

排序首先基于分区索引,然后是每个分区内的项目顺序.因此,第一个分区中的第一个item索引为0,最后一个分区中的最后一个item的索引最大.当RDD包含多个分区时此方法需要触发spark作业.

first_row = df.first()
numAttrs = len(first_row['score'].split(" "))
print("新增列的个数", numAttrs)
attrs = sc.parallelize(["score_" + str(i) for i in range(numAttrs)]).zipWithIndex().collect()
print("列名:", attrs)
for name, index in attrs:
    df_split = df_split.withColumn(name, df_split['s'].getItem(index))
df_split.show()

 

  • dataframe将一行分成多行

df_explode = df.withColumn("e", explode(split(df['score'], " ")))
df_explode.show()

 

  • dataframe列数据的合并

列的合并有两个函数:一个不添加分隔符concat(),一个添加分隔符concat_ws()

concat

df_concat = df_split.withColumn("score_concat", concat(df_split['score_0'], \
                                                       df_split['score_1'], df_split['score_2'], df_split['score_3']))
df_concat.show()

 

caoncat_ws

df_ws = df_split.withColumn("score_concat", concat_ws('-', df_split['score_0'], \
                                                       df_split['score_1'], df_split['score_2'], df_split['score_3']))
df_ws.show()

  • dataframe多行转多列

pivot: 旋转当前[[dataframe]]列并执行指定的聚合 

#DataFrame 数据格式:每个用户对每部电影的评分 userID 用户ID,movieID 电影ID,rating评分
df=spark.sparkContext.parallelize([[15,399,2], \
                                   [15,1401,5], \
                                   [15,1608,4], \
                                   [15,20,4], \
                                   [18,100,3], \
                                   [18,1401,3], \
                                   [18,399,1]])\
                    .toDF(["userID","movieID","rating"])
#pivot 多行转多列
resultDF = df.groupBy("userID").pivot("movieID").sum("rating").na.fill(-1)
#结果
resultDF.show()

参考文献:

Spark DataFrame 列的合并与拆分

Spark DataFrame 多行转多列

pyspark datafram拆分多条,多项合并 pyspark dataframe 拆分多条,多项合并 1.拆分多项,将dataframe单项按照特定分割符号才分成多条数据 from pyspark.sql.types import StringType from pyspark.sql.functions import udf,explode,split # 省略df_course的获取,这里举例为两列,第一列为课程ID,第二列为该门课所有... 阅读详情

相关推荐

PySpark基础用法

常用引用 from pyspark.shell import sqlContext from pyspark.sql import SparkSession from pyspark.sql import functions as func from pyspark.sql.types import StringType, ArrayType, StructType, StructField 创建spark spark = SparkSession.builder.enableHiveSupport().

mthdxc的博客 1850

python spark 纵向合并多个Datafame

最近在学习spark 哎,但是发现很多功能都没有pandas好用,很多功能都不具备(也可能是我还没学到那),记录一个纵向合并的问题。spark:(我写的很笨的办法)可能有更简单的方法我没有找到。

weixin_44548098的博客 1393

Hadoop与Python:PySpark大数据处理指南

理解为什么需要Hadoop和Spark(大数据处理的“刚需”场景);搞懂Hadoop、Spark、PySpark的关系(谁负责存储?谁负责计算?Python扮演什么角色?掌握PySpark的核心操作(如何用Python代码处理分布式数据);完成一个实战项目(用PySpark分析电商用户行为数据,输出可落地的业务结论)。范围:聚焦Hadoop生态中与数据处理最相关的组件(HDFS、YARN、Spark),重点讲解PySpark的编程模型和实战技巧,不涉及Hadoop底层源码或Spark内核开发。

AI天才研究院 1171

pyspark dataframe 列的合并与拆分,单行转多行

test_score = spark.createDataFrame([{'name':'王强','score':'{"语文":119,"数学":125,"外语":120,"物理":96,"化学":70,"生物":40}'}, {'name':'刘明','score':'{"语文":105,"数学":121,"外语":110,...

qq_42886289的博客 6026

SparkSQ操作DataFrame,合并DataFrame

例子中定义了多个List数据集合,包括用户信息,订单信息,用户订单信息,将List对象生成DataFrame,使用SparkSQL查询将多个DataFrame合成一个DataFrame,使用Scala语言编写。

1.28寸圆屏LCD驱动开发:GC9A01与RT-Thread嵌入式实现

圆形TFT-LCD是一种面向可穿戴、IoT终端的紧凑型人机交互显示技术,其核心在于SPI/QSPI接口时序控制与GRAM内存映射原理。通过驱动芯片(如GC9A01)完成电源管理、伽马校正和MADCTL方向配置,可实现低功耗、高刷新率的图形渲染。该技术显著提升嵌入式设备的UI表现力与空间利用率,在智能手环、传感器节点、微型HMI等资源受限场景中具备突出工程价值。本文围绕1.28寸圆屏LCD模块,详解硬件接口规范、RT-Thread下QSPI驱动架构及Bresenham算法优化实践。

weixin_42599908的博客 155

pyspark列合并为一行

将dataframe利用pyspark列合并为一行,类似于sql的GROUP_CONCAT函数。例如如下dataframe: 需要按照列相同的列d将s合并,想要的结果为: 利用groupby去实现就好,spark里面可以用concat_ws实现,可以看这个Spark中SQL列合并为一行,而这里的concat_ws合并缺很奇怪,官方...

python学习者的博客 2731

音视频从入门到精通——指数哥伦布码原理

在计算机中,一般数字的编码都为二进制,但是由于以相等长度来记录不同数字,因此会出现很多的。

mirana的专栏 1379

Spark DataFrame列的合并与拆分

Spark DataFrame 列的合并与拆分 版本说明:Spark-2.3.0 使用Spark SQL在对数据进行处理的过程中,可能会遇到对一列数据拆分为多列,或者把多列数据合并为一列。这里记录一下目前想到的对DataFrame列数据进行合并和拆分的几种方法。 1 DataFrame列数据的合并 例如:我们有如下数据,想要将三列数据合并为一列,并以“,”分割 +----+---+----...

vicleev的博客 1万+

SAP 货币类型和公司代码的货币设置

货币类型分为公司代码和集团货币,一般FI 10类型和集团货币 30,事务代码是8KEM; 设置货币类型的事务代码是OB22 在S/4 1809版本里编辑功能统合到事务代码FINSC_LEDGER 中了,这里集中了分类账和公司代码的设置; 设置多账簿的币种(会出现在BSEG和FAGLFLEXA表中) 汇率维护在TCURR表中,可通过BAPI_EXCHANGERATE_GETDETAIL函数获取。 CO货币的事务代码是成本控制范围货币:OKKP ,一般设置为货币码20和30; 另外, SCC4设置集团货币,

RichardYang2020的博客 1万+

小白快速上手 labelme:新手图像标注详解教程

本教程旨在帮助初次接触 labelme 的用户快速上手该软件,掌握基本操作与标注流程,为语义分割数据集做准备。

小白一枚~ 2万+

PySpark获取Dataframe中所有非ASCII字符

【代码】PySpark获取Dataframe中所有非ASCII字符。

weixin_30777913的博客 448

车辆网络安全ISO/SAE 21434解读(一)概述

ISO/SAE 21434 《道路车辆 网络安全工程》是SAE和ISO共同制定的一项针对道路车辆的网络安全标准,它是一个面向汽车行业全供应链(OEM及各级供应商)的车辆网络安全管理指导文件

xiaoxiabang的博客 8420

PySpark 列的合并与拆分

1、读入数据 >>> from pyspark.sql import SparkSession >>> spark = SparkSession.builder.master("local").appName("dataframe_split").config("spark.some.config.option", "some-value").getOrCreate() >>> sc = spark.sparkContext >>> d

Harrytsz的博客 2864

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1910

2、硬件工程师笔试面试汇总(2025版本)

本文摘要:文章系统梳理了硬件工程师笔试面试中的电子元器件知识要点,涵盖电阻、电容、电感、二极管、三极管、MOS管等器件的工作原理、选型要点和应用场景。详细解析了UART、I2C、SPI等通信协议的特点及实现方式,并探讨了电源管理、信号处理、PCB设计等核心问题。针对常见电路如放大电路、滤波电路、逻辑电路等提供了深入分析,同时介绍了示波器使用、单片机系统设计等实用技能。文章还包含器件封装、电平转换、时序分析等工程实践内容,并附有相关真题解析和仿真实验指导,为硬件工程师提供全面的技术参考。

XU157303764的博客 9003

【pyspark】dataframe常用操作

pyspark中,dataframe与sql的耗时会经引擎优化,效率高于rdd。在使用dataframe过程中,应尽量避免使用udf,因为序列化数据原本在JVM中,现在spark在worker上启动一个Python进程,需要将全体数据序列化成python可解释的格式,计算昂贵。 列相关 根据已有列生成新列 from pyspark.sql.functions import length, col, lit df.withColumn("length_col", length(col("existing

己亥孟陬 1420

Codex 调试记录获取完全指南:日志查看、工具调用与实战排查教程

本文主要介绍了Codex 调试记录获取完全指南:日志查看、工具调用与实战排查教程,希望能对使用Codex的同学们有所帮助。 文章目录 1. 背景 2. 实战教程

weixin_43178406的博客 6万+

pyspark dataframe创建空表、数据关联、数据标记

创建空数据表; 分组统计groupby; 两dataframe关联合并; 为数据增加排序列; 数据条件标记。

土豆 2650

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

为pyspark DataFrame增加一列

场景是为现有的dataFrame新增一列数据,这些数据与原有数据无关。其功能类似于pandas 的join。 参考 python - PySpark - Adding a Column from a list of values - Stack Overflow from pyspark.sql import SparkSession import numpy as np import pandas as pd from pyspark.sql import functions as F

leokingszx的博客 4363

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pyspark使用

在处理同一批数据(130w条样本测试)时,使用pyspark(local模式)处理需要0.05s,而pandas的apply函数则需要15s,快了300倍!pandas的自定义函数applyreturn 1else:return 0pyspark的自定义函数udf。

qinbaby的专栏 1273

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PySpark查询Dataframe中包含乱码的数据记录的方法

首先,用PySpark获取Dataframe中所有非ASCII字符,找到其中的非乱码字符。

weixin_30777913的博客 625

pyspark开发趣味题1-求共同好友

文章目录一.问题描述二.解决方案2.1 梳理解决方案2.2 整理代码思路2.3 最终解决方案2.3.1 PySpark RDD解决方案2.3.2 PySpark Spark SQL解决方案2.3.3 PySpark DataFrame解决方案 一.问题描述 有这么一个类通讯录的数据集如下截图: 我想得到共同好友的清单 希望得到的输出类似如下: (B,C) -->(A) (F,G) -->(B,C) 这个场景只是一个简单的数据场景,真实的场景会比这个复杂很多。 二.解决方案 2.1 梳理解决方案

只是甲的博客 4984

【PySpark 学习笔记 一】从零开始:PySpark 基础概念

本文为Python开发者提供PySpark的快速入门指南,涵盖以下核心内容: Spark基础 分布式计算引擎,解决单机处理TB/PB级数据的瓶颈 统一批处理、流处理、图计算和机器学习四大场景 PySpark架构 Python作为交互层调用JVM端的Spark核心引擎 通过Py4J桥通信,优先使用内置函数减少跨进程开销 关键对比 Pandas:单机内存级数据处理 PySpark:Python生态+分布式能力,适合数据科学全流程 Scala Spark:原生性能最优,多用于大数据平台开发 学习建议 无需学习Sc

MaoLin Tian's Blog 510

PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理

PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理 https://blog.youkuaiyun.com/sinat_26917383/article/details/80500349#_13___142

AcceptedLin的博客 525
上一篇: Spark应用程序第三方jar文件依赖解决方案
下一篇: pyspark dataframe将一行分成多行并标记序号(index)
山木枝
博客等级 码龄11年 8粉丝 24原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值