【Pyspark-驯化】一文搞懂Pyspark中Dataframe的基本操作介绍

【Pyspark-驯化】一文搞懂Pyspark中Dataframe的基本操作介绍
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1.基本介绍

  一般目前对于pyspark进行操作,基本都是处理一些log数据,这个时候一般通过将数据转换为dataframe进行操作会比较常用,对于算法工程师来说,目前我在的公司基本数据以及被进行ETL操作了,基本是结构化的数据,不需要我们通过scala进行数据转换了,因此基本都是对dataframe的数据进行数据清洗、特征提取。

💡 2. 代码用法

2.1 初始化spark环境

  对于pyspark来讲,常用的就是sparkcontext类,一般都是先启动一个这样的程序才可以进行相应的操作,而SparkSession可以在不创建SparkConf,SparkContext或SQLContext的情况下创建SparkSession(它们封装在SparkSession中), 这个sparksession就是用来调取dataframe相关操作的类,具体的操作如下:

    # 一般在进行spark-submit的.py文件在初始化的时候,需要创建spark对象,具体如下
    from pyspark import SparkConf
    from pyspark import SparkContext
    from pyspark.sql import SparkSession
    from pyspark.sql import SQLContext
    from pyspark.sql import Row
    from pyspark.sql.types import StructType
    from pyspark.sql.types import StructField
    from pyspark.sql.types import StringType
    from pyspark.sql import functions as fn
    from pyspark.sql import types as T
    sc_conf = SparkConf().setAppName('b2b_fraud_data')
    spark = SparkSession.builder.config(conf=sc_conf).enableHiveSupport().getOrCreate()

  • 而对于上述的两个class来说,经常对创建相关的临时表,createOrReplaceTempView:创建临时视图,此视图的生命周期与用于创建此数据集的[SparkSession]相关联。
    createGlobalTempView:创建全局临时视图,此时图的生命周期与Spark Application绑定。如果想要删除的话就得使用spark.catalog.dropGlobalTempView(“tempViewName”)

2.2 spark中dataframe基础操作

  sparksq使用方法论:增删查改、行列操作、排序去重、分组统计、表连接、自定义,而且spark的写法有个好处就是可以一个操作后接着对之前的结果进行在操作(选择等)

  • 常规操作
    test = spark.createDataFrame([['a', 0,2], ['b', 0, 0], ['c', 4, 4],
                                 ['c', 0,2], ['c', 1,0]], schema=['a', 'b', 'c'])
    test.show() 
    1. 类型
    test.dtypes
    
    2.列名
    test.columns

    3. 统计shape大小
    test.count()

    4. 输出shcaml
    test.printSchema()
  • 增删查改
    from pyspark.sql import functions as fn
    1. 查找: 根据需要选择列按条件进行过滤
    test = spark.createDataFrame([['a', 0,2], ['b', 0, 0], ['c', 4, 4],
                                 ['c', 0,2], ['c', 1,0]], schema=['a', 'b', 'c'])
    test.show() 
    # 按条件进行过滤可以选择filter也可以选择where
    test.select('a').filter(test['a'] != 2).show()
    test.filter((test['a'] != 0) | (test['c'] != 0)).show()

    # 多次filter条件,按区间选择值,对列按照sql语句进行选择
    test.filter(test.b.betwen(1,4)).filter("a like 'a%'").show()

    # 这里需要注意的事,如果通过withcolumn创建列了新的列需要通过function.col函数来指定列
    test.withColumn('aa',fn.size(test['a'])).filter((fn.col('aa') > 1))

    # 也可以通过选择条件赋值给新的列在进行过滤
    test.withColumn("aa", when((test['a'] == 0) 
                && (test['b'] == 0, 0).otherwise(1)).filter(fn.col('aa') == 1)

    # 或者可以创建一个临时表,在临时表上使用sql
    test.createOrReplaceTempView("test_df")
    spark.sql("select distinct(a) from test_df").show()

    
    2. 修改/增加新列:withcolumn, 比如对string通过正则表达式进行过滤
    test = test.withcolumn('aa', fn.regexp_replace('query', "[^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a]", ""))

    3. 删除一列: drop
    test = test.drop('a')
    # 也可以直接选择自己需要的一些列
    test = test.select(['a', 'b'])

💡 3. 注意事项

  • DataFrame操作是惰性的,直到遇到行动操作(如show、collect)时才会执行。
  • 使用列表达式时,需要使用df对象引用DataFrame中的列。
  • 理解DataFrame的分区和并行度,以优化性能和资源使用。

💡 4. 总结

  PySpark的DataFrame提供了一种高效、易用的方式来处理结构化数据。通过本博客的代码示例,我们学习了如何创建DataFrame、执行数据转换和操作,以及使用高级功能如窗口函数和连接操作。希望这篇博客能够帮助你更好地理解DataFrame,并将其应用于大数据处理中。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法驯化师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值