PySpark3:Row对象常见操作以及Row、RDD、DataFrame互相转换

news/2024/11/16 16:26:09 标签: python, 大数据, spark

目录

一、Row对象常见操作

二、Row、RDD、DataFrame互相转换

1、RDD—>DataFrame

2、DataFrame—>RDD

3、DataFrame—>Row

4、Row—>DataFrame


一、Row对象常见操作

python">from pyspark.sql import Row

# 创建一个Row对象
row = Row(name="张三", age=25)

# 使用索引、字段名访问字段
print(row[0], row.name)  

# 修改Row对象(通过转换为字典的方式进行修改)
dict_ = row.asDict()
dict_['age'] = 26 
del dict_['name']
dict_['姓名'] = "李四"
new_row = Row(**dict_)

# 值迭代
for field in row:
    print(field)

#判断是否包含某个字段
print("name" in row)

# 获取字段数量
len(row)

二、Row、RDD、DataFrame互相转换

1、RDD—>DataFrame

python">from pyspark.sql import SparkSession
from pyspark.sql import Row

# 初始化SparkSession
spark = SparkSession.builder.appName("test").getOrCreate()

# 创建一个RDD
rdd = sc.parallelize([("Alice", 25), ("Bob", 30)])

# 将RDD的元素转换为Row对象
row_rdd = rdd.map(lambda x: Row(name=x[0], age=x[1]))

# 将Row RDD转换为DataFrame
df = spark.createDataFrame(row_rdd)
df.show()

2、DataFrame—>RDD

python"># 从DataFrame获取RDD
rdd_from_df = df.rdd

# 进一步将RDD的元素转换为元组或其他格式
rdd_as_tuples = rdd_from_df.map(lambda row: (row.name, row.age))
rdd_as_tuples.collect()

3、DataFrame—>Row

DataFrame的每一行都是一个Row对象。

python"># 迭代DataFrame获取Row
for row in df.collect():
    print(f"name:{row.name} age:{row.age}")

# 以下都会生成Row对象
df.limit(1)
df.first

4、Row—>DataFrame

python"># Row对象列表
rows = [Row(name="Alice", age=25), Row(name="Bob", age=30)]

# 创建DataFrame
df = spark.createDataFrame(rows)
df.show()


http://www.niftyadmin.cn/n/5754384.html

相关文章

.NET 9 - BinaryFormatter移除

1.简单介绍 .NET 9 SDK正式版已经发布, 下载地址是.NET9 同时.NET Conf 2024 大会已经从2024-11-13开始了,感觉Aspire和AI的内容相对挺多的,主题分享演示时候打开的网站大部分都是Blazor制作的。 这次.NET Conf 2024老师也再次说明了一下,…

1 图的搜索 奇偶剪枝

图论——图的搜索_Alex_McAvoy的博客-CSDN博客 语雀版本 1 深度优先搜索DFS 1. 从图中某个顶点 v0 出发,首先访问 v0 2. 访问结点 v0 的第一个邻接点,以这个邻接点 vt 作为一个新节点,访问 vt 所有邻接点,直到以 vt 出发的所有节…

回顾二维数组——数组指针部分

数组指针才真正等同于二维数组名 数组指针: 当运行下面的代码的时候,会有警告,偏移量不同,arr偏移的是整行数组,与注释的p不同,如果p&arr[0][0],p表示的就是依次、连续的12个元素地址,偏移…

sql专场练习(二)(1-5)

第一题 create database yhdb01; show tables ; create table sql2_1(uid int,subject_id int,score int ) row format delimited fields terminated by "\t"; load data local inpath /home/homedata/sql2/sql2_1.txt into table sql2_1; select * from sql2_1;100…

Vue.js 前端框架入门

简介 Vue.js 是一个构建用户界面的渐进式JavaScript框架。本文将带你了解Vue项目的目录结构,启动顺序,并逐步指导你安装必要的环境,以及如何开发一个基础的Vue项目。 需要的环境 Node.js:Vue.js 项目依赖于Node.js,…

Android 中的 Zygote 和 Copy-on-Write 机制详解

在 Android 系统中,Zygote 是一个关键的进程,几乎所有的应用进程都是通过它 fork(派生)出来的。通过 Zygote 启动新进程的方式带来了显著的性能优势,这得益于 fork 操作和 Linux 中的 Copy-on-Write(COW&am…

uni-app用户登录⑫

文章目录 十九、用户登录-账户名密码登录一、前端数据整理二、使用 store 进行用户信息存储 二十、用户登录-手机验证码登录一、验证码处理二、数据发送 十九、用户登录-账户名密码登录 一、前端数据整理 定义发送函数,将用户信息以及本次请求的用户登录类型传递给…

Linux之vim全选,全部复制,全部删除

Linux之vim全选,全部复制,全部删除 Vim中如何全选并复制? (区分大小写!!!) 全部删除:按esc键后,先按gg(到达顶部),然后d…