<<Spark Streaming Programming Guide>> - Part 2 基本概念


包的依赖

比较简单,有时间再翻译,先作为placeholder


初始化StreamingContext

StreamingContext通过SparkContext来创建。

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

sc = SparkContext(master, appName)
ssc = StreamingContext(sc, 1)

其中appName指定了Spark程序的名字,在运行多个程序的Spark集群中会用来标识区分不同的程序;master参数指定Spark cluster的Master地址,根据使用不同的集群管理器 (standalone, YARN, Mesos) 会有不同的地址格式,另外还有一个特殊格式local[N]来指定本地模式(非集群模式),N用来指定线程个数,也是最多允许task的并发数目,另外可以使用特殊格式local[*]让Spark自动选择,它会探测的CPU的内核数(core)来用作N的值. 在实际的集群部署中,master参数都不会写死在代码里或者配置文件里,最方便的方式就是在通过spark-submit在提交程序到集群的时候通过--master参数运行时指定。

批处理的间隔在如上的例子里设置为1,单位为秒。具体值的设置取决于业务自身的需求,可用的集群资源,以及程序实际的处理能力。

context建立之后,需要做以下事情:
  • 通过创建输入离散数据流(DStream)来定义输入流;
  • 通过应用DStream的各种转换操作和最终的输出操作来定义流的计算方式;
  • 启动数据流的接收和处理: streamingContext.start().
  • 等待程序运行被终止: streamingContext.awaitTermination().
  • 程序可以通过手动方式来结束终止: streamingContext.stop().

需要记住的要点:

  1. 一旦StreamingContext被启动,流处理的计算方式不能被修改;
  2. 一旦StreamingContext被停止,则不能继续启动,只能重新启动;
  3. 在同一时刻,一个JVM里只能有一个被启动的StreamingContext
  4. 终止 StreamingContext 同时也终止了关联的 SparkContext。如果只想终止StreamingContext 而不终止SparkContext,则在调用stop方法时指定可选参数stopSparkContext为false (默认为true,停止SparkContext)。StreamingContext.stop(stopSparkContext=True, stopGraceFully=False)
  5. SparkContext可以被StreamingContexts重用,只要不违反上面提到的约束3 - 在同一时刻一个JVM内只能有一个被启动的StreamingContext - 则当前一个StreamingContext停止后,就可以启动下一个StreamingContext。


离散数据流 (DStream)

离散数据流是Spark Streaming提出的一个抽象概念,用来代表持续的数据流,数据流或者从数据源获得如kafka,或者通过其他的DStream转换而来。在内部,DStream实际是一组连续的RDD(RDD的解释具体参照Spark核心包),每一个RDD包含的是数据流在一定时间间隔的数据,如下图所示 -
Spark Streaming

所有对DStream的操作实际是对内在的RDD的操作。例如在综述中的wordCount例子中将句子转换为单词的flatMap操作,会作用到每一个时间间隔对应的RDD上,如下如所示。

Spark Streaming
还是Spark的核心引擎对RDD进行转换操作,DStream操作只是在上面封装了一下,从而掩盖了大多数RDD操作的细节,对外暴漏出的是更高层易用的接口。具体的操作会在后面详述。



输入数据流和接收器

每一种输入数据流(除了文件流以外),都包含一个接收器(Receiver),接收器负责从数据源接收收据然后存储在Spark中。
两类数据源:
  • 基本数据源:直接存在在Spark Streaming的类库中,包括文件流和Socket流;
  • 高级数据源:例如Kafka,Flume和Kinesis需要依赖外部的工具类。所以需要加入额外的依赖引入到工程中,例如pom中的dependency。

基本数据源

基本数据源除了从TCP Socket监听的文本数据流外,还可以把文件作为输入源。
文件数据流

可以从任何兼容HDFS API的文件系统目录中读取数据(也就是HDFS, S3, NFS), 可以通过以下方式创建DStream -

 streamingContext.textFileStream(dataDirectory)

Spark Streaming会监控目录dataDirectory,然后处理任何在此目录下创建的文件 (不支持递归的处理子目录),注意
- 文件必须具有相同格式
- 文件必须一次改名或者移动到此目录下。
- 一旦文件移动到此目录后,后续对文件内容的修改不能被监听到。 对于简单的文本文件,不需要创建receive接收器,所以不需要分配额外的内核。


基于定制化的接收器(Receiver)

可以自己实现接收器来创建DStream。


RDD队列作为Stream: 

为了方便测试,可以基于RDD队列来创建DStream,使用streamingContext.queueStream(queueOfRDDs)。每一个加入队列的RDD被作为DSream中的一次批处理需要处理的数据。


高级数据源

Spark 2.0的Python API中可以使用了Kafka,Keneis 和 Flume的数据源。
这列数据源需要第三方的类库支持,例如kafak和Flume有着比较复杂的依赖。因此,为了减少依赖之间的版本冲突,因此把从这类数据源创建DStream的功能被移到了单独的类库中,只有当需要的时候才把它引入到工程的依赖中。



定制数据源

Python API不支持。


接收器的可靠性

根据可靠性可以分为两类数据源,一类如Kafka和Flume支持消息确认的数据源,因此当接收器接受到消息后可以向数据源进行数据的确认,这样可以保证没有数据的丢失。两类数据源 -
可靠的接收器 - 可靠的接收器能够在接收并且存储数据到Spark后,向数据源发送确认消息。要求的前提是这类数据源支持此确认机制;
不可靠的接收器 -  不可靠的接收器不会向数据源进行消息确认,一个可能是数据源本身不支持确认机制,例如Socket数据要换;一个是接收器不想这样做这么复杂,例如对数据的丢失可以容忍;




在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值