当前位置: 首页 > news >正文

Pyspark中的ROW对象使用

文章目录

  • Pyspark中的Row对象使用
    • Row对象介绍
    • Row对象创建
    • 使用Row对象创建DataFrame
    • DataFrame转换为row对象
    • Row对象包含的方法
      • asDict()
      • count()
      • index()

Pyspark中的Row对象使用

Row对象介绍

在PySpark中,Row对象是DataFrame的基本组成单元,它封装了DataFrame中的每一行数据。每行数据以Row对象的形式存在,其中包含了该行的各个字段值。这些字段值可以像属性一样被访问,使得处理数据变得更加直观和方便。Row对象的创建和使用,使得PySpark能够以更加结构化的方式处理数据,提高了数据处理效率和便利性。

Row对象创建

from pyspark import SparkSession,Row
from pyspark import SparkContext,SparkConfconf = SparkConf()
conf.setAppName('ldsx_create_rdd')
conf.setMaster('local[*]')# 初始化对象
spark = SparkSession.builder.config(conf=conf).getOrCreate()#创建Row对象
fields = ["name", "age", "height"]
schema = Row(*fields)
data1 = schema('ldsx',18,183)
#print内容
Row(name='ldsx', age=18, height=183)#可以直接通过属性访问
data1.name
# 可以通过索引访问
data1[0]

使用Row对象创建DataFrame

Row对象是DataFrame的基本组成单元

# 创建包含row对象的列表
row_list = [schema(1,2,3),schema(2,3,4),schema('ldsx',3,4)]
# 打印信息
>>[Row(name=1, age=2, height=3), Row(name=2, age=3, height=4), Row(name='ldsx', age=3, height=4)]
# 使用row对象创建dataframe
df_1 = spark.createDataFrame(row_list)
df_1.show()
'''
+----+---+------+
|name|age|height|
+----+---+------+
|   1|  2|     3|
|   2|  3|     4|
|ldsx|  3|     4|
+----+---+------+
'''

DataFrame转换为row对象

# 拉去数据到dirver端,在生产中慎用collect
df_1.rdd.collect()
>>[Row(name='Alice', age=25, score=None), Row(name='Bob', age=None, score=30), Row(name='John', age=35, score=40)]
# 可以在map中进行处理 lambda 可以换成专门处理方法,这个传入lambda的x就是row对象
df.rdd.map(lambda x:print(x)).count() #count作用触发map

Row对象包含的方法

asDict()

转换成字典

from pyspark import SparkSession,Row
from pyspark import SparkContext,SparkConf
#创建Row对象
data2 = Row(name='ldsx2', age=18, height=183)#row对象转换dict结构
data1.asDict()
#输出内容
>>{'name': 'ldsx2', 'age': 18, 'height': 183}#row对象中包含row对象 使用True参数内部也会转换
Row(ldsx=1, val=Row(name='a', age=2)).asDict()
>>{'ldsx': 1, 'val': Row(name='a', age=2)}
Row(ldsx=1, val=Row(name='a', age=2)).asDict(True) #True内部也转换
>>{'ldsx': 1, 'val': {'name': 'a', 'age': 2}}

count()

统计值出现的次数

# count只能统计外层值 这种值为Row对象的里面如果值存在1 也不会统计
Row(ldsx=1, val=Row(name='a', age=1),ldsx3=1).count(1) 
#返回值为1的个数
>>2

index()

index(value[, start, stop])

类似python list中index方法
value:要查询的值
start :查找的起始位置 可选
stop:查找的结束位置 可选

#row对象里面值row对象不查询
Row(ldsx=1, val=Row(ldsx=1, age=1),ldsx3=1,ldsx4=1).index(1,1,5)
#返回搜索索引范围1~5中值为1的索引编号
>>2# 查找不存在的元素报错,通过报错也可知index方法是吧row对象当成了一个tuple进行查询的
'''
Row(ldsx=1, val=Row(ldsx=1, age=1),ldsx3=1,ldsx4=1).index(9,1,5)
Traceback (most recent call last):File "/home/ldsx/down_load/pycharm_data/pycharm-community-2024.2/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Execexec(exp, global_vars, local_vars)File "<input>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
'''
#所以我们肯定也可以使用索引位置进行row对象内的元素访问如
data1 = Row(ldsx=1, val=Row(ldsx=1, age=1),ldsx3=1,ldsx4=1)
data1[0]
#返回
>>1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8
  • SQL 数据查询
  • 《JavaEE进阶》----8.<SpringMVC实践项目:【简易对话留言板(数据存在内存中)】>
  • 3134. 找出唯一性数组的中位数
  • Go父类调用子类方法(虚函数调用)
  • k8s中pod基础及https密钥、horber仓库
  • 修改服务器DNS解析及修改自动对时时区
  • 零信任赋予安全牙齿,AI促使它更锋利
  • JAVA vs Python:谁更适合后端开发?
  • 软件工程-图书管理系统的需求分析
  • 天地图使用
  • WPF MVVM如何在ViewModel直接操作控件对象
  • 详细解说一下Python中的递归和基例
  • JVM面试(二)内存区域划分
  • 在MySQL存储过程中,以下句子需要以分号(;)结尾
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 07.Android之多媒体问题
  • 2017 前端面试准备 - 收藏集 - 掘金
  • DataBase in Android
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java知识点总结(JavaIO-打印流)
  • Python socket服务器端、客户端传送信息
  • scala基础语法(二)
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 力扣(LeetCode)965
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 译有关态射的一切
  • 阿里云ACE认证之理解CDN技术
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • $.ajax()参数及用法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (libusb) usb口自动刷新
  • (多级缓存)缓存同步
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)3D模板阴影原理
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)四层和七层负载均衡的区别
  • .NET C# 操作Neo4j图数据库
  • .NET 分布式技术比较
  • .NET 中 GetProcess 相关方法的性能
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net通过类组装数据转换为json并且传递给对方接口
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /var/spool/postfix/maildrop 下有大量文件
  • @Value读取properties中文乱码解决方案
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试