[博学谷学习记录] 超强总结,用心分享|Pyspark基础入门3

文章介绍了Pyspark中的RDD概念,包括其作为数据传输管道的角色,以及RDD的五大特性:可分区、计算生成、依赖关系、KV分区和计算移动原则。此外,详细讲解了如何通过并行化本地集合和读取外部数据源构建RDD,并展示了相关代码示例。最后提到了RDD的只读性和依赖关系在数据处理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pyspark

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天继续和大家分享一下Pyspark基础入门3
#博学谷IT学习技术支持



前言

Spark是一款用于大规模数据处理分布式的分析引擎
在这里插入图片描述
今天主要分享的RDD


一、RDD的基本介绍

RDD是一个抽象的数据模型, RDD本身并不存储任何的数据, 仅仅是一个数据传输的管道, 在这个管道中,作为使用者, 只需要告知给RDD应该从哪里读, 中间需要进行什么样的转换逻辑操作, 以及最后需要将结果输出到什么位置即可, 一旦启动后, RDD会根据用户设定的规则, 完成整个处理操作

二、RDD的五大特性和五大特点

  • 五大特性:

1- (必须的) RDD可分区的
2- (必须的) 每一个RDD都是由一个计算函数产生的
3- (必须的) RDD之间是存在着依赖关系
4- (可选的) 对于KV类型的数据, 是存在分区函数,对于KV类型的RDD默认是基于Hash 分区方案
5- (可选的) 移动数据不如移动计算(让计算程序离数据越近越好)

  • 五大特点:

1- RDD是可分区的: 分区是一种逻辑分区, 仅仅定义分区的规则,并不是直接对数据进行分区操作, 因为RDD本身不存储数据
2- RDD是只读的: 每一个RDD都是不可变的, 如果想要改变, 处理后会得到一个新的RDD, 原有RDD保存原样
3- RDD之间存在依赖关系: 每个RDD之间都是有依赖关系的, 也称为血缘关系, 一般分为两种依赖(宽依赖/窄依赖)
4- RDD可以设置cache(缓存): 当计算过程中, 一个RDD被多个RDD所依赖的时候, 可以将这个RDD结果缓存起来, 这样后续使用这个RDD的时候, 可以直接获取, 不需要重新计算
5- RDD的checkpoint(检查点): 与缓存类似, 都是可以将中间某一个RDD的结果保存起来, 只不过checkpoint支持持久化保存

三、如何构建RDD

1- 通过parallelized Collections构建RDD: 并行本地集合方式 (测试)

2- 通过 External Data构建RDD: 加载外部文件的方式 (测试/开发)

在这里插入图片描述

1.通过并行化本地的方式构建RDD

from pyspark import SparkContext, SparkConf
import os
# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'


if __name__ == '__main__':
    print("如何构建RDD方式一: 并行本地集合")

    # 1. 创建SparkContext核心对象
    conf = SparkConf().setAppName("create_rdd_01").setMaster("local[2]")
    sc = SparkContext(conf=conf)

    # 2. 读取数据集: 本地集合
    rdd_init = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10],3)


    # 3. 打印结果数据
    print(rdd_init.collect())

    print(rdd_init.getNumPartitions()) # 获取这个RDD有多少个分区

    print(rdd_init.glom().collect()) # 获取每个分区中的数据

    # 4- 释放资源
    sc.stop()

2. 通过读取外部数据源方式

from pyspark import SparkContext, SparkConf
import os
# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'


if __name__ == '__main__':
    print("如何构建RDD方式二: 读取外部数据集")

    # 1. 创建SparkContext核心对象
    conf = SparkConf().setAppName("create_rdd_02").setMaster("local[*]")
    sc = SparkContext(conf=conf)

    # 2. 读取数据集:
    rdd_init = sc.textFile("file:///export/data/workspace/ky06_pyspark/_02_SparkCore/data/")


    # 3. 打印结果
    print(rdd_init.collect())

    print(rdd_init.getNumPartitions())

    print(rdd_init.glom().collect())
    """
        [
            [
                'hadoop hive hive hadoop sqoop', 
                'sqoop kafka hadoop sqoop hive hive', 
                'hadoop hadoop hive sqoop kafka kafka'
            ], 
            [
                'kafka hue kafka hbase hue hadoop hadoop hive', 
                'sqoop sqoop kafka hue hue kafka'
            ]
        ]
        
        [
            ['hadoop hive hive hadoop sqoop', 'sqoop kafka hadoop sqoop hive hive'], 
            ['hadoop hadoop hive sqoop kafka kafka'], 
            ['kafka hue kafka hbase hue hadoop hadoop hive'], 
            [], 
            ['sqoop sqoop kafka hue hue kafka']]

    """
    # 4- 释放资源
    sc.stop()

总结

今天给大家分享的是Pyspark基础入门3基本的RDD操作。

### Netty 学习笔记概述 Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。以下是有关 Netty 的一些核心概念及其学习资源: #### 一、Netty 基础介绍 Netty 提供了一种简单而强大的 API 来处理复杂的网络通信场景。其设计目标是简化并加速网络应用程序的开发过程。它支持多种传输方式(如 TCP 和 UDP),并且提供了丰富的功能来满足不同的需求。 - **Channel**:表示到实体(例如套接字)的连接[^1]。 - **EventLoop**:负责处理 I/O 操作的任务调度器。 - **Pipeline** 和 **Handler**:通过一系列处理器链路完成数据流的操作。 #### 二、博学中的 Netty 资源 在博学的相关课程中提到过 Netty 的实际应用场景之一是在 RPC 框架中的使用[^3]。具体来说,基于 Netty 实现的服务端与客户端之间的高效通信机制能够显著提升系统的性能表现。此外,在分布式系统领域内也有广泛的应用价值。 对于初学者而言,可以从以下几个方面入手了解该技术栈: 1. 安装配置环境; 2. 掌握基本组件的工作原理; 3. 尝试编写简单的 Echo Server/Client 示例程序验证理论知识; 4. 进一步探索高级特性比如 SSL/TLS 加密传输等。 下面给出一段利用 Java 编写的最基础版本EchoServer代码作为入门演示: ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class EchoServer { private final int port; public EchoServer(int port){ this.port=port; } public void start() throws Exception{ EventLoopGroup bossGroup=new NioEventLoopGroup(); EventLoopGroup workerGroup=new NioEventLoopGroup(); try{ ServerBootstrap b=new ServerBootstrap(); //创建引导类实例 b.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class); ChannelFuture f=b.bind(port).sync();//绑定端口等待直到操作完成 System.out.println("server started at "+f.channel().localAddress()); f.channel().closeFuture().sync();//阻塞当前线程直至通道关闭 }finally{ workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } public static void main(String[] args)throws Exception{ new EchoServer(8080).start(); } } ``` 以上代码片段展示了如何设置一个监听指定端口号的基础服务端逻辑结构。 #### 三、其他推荐的学习路径 除了上述提及的内容外,还可以参考 RocketMQ 中涉及的部分知识点进一步加深理解消息队列背后所依赖的技术细节[^2]。这些都将有助于构建更加健壮可靠的软件解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值