摸鱼大数据——Spark Structured Steaming——基本介绍

一、结构化流介绍

1、有界和无界数据

  • 有界数据:

 有界数据: 指的数据有固定的开始和固定的结束,数据大小是固定。我们称之为有界数据。对于有界数据,一般采用批处理方案(离线计算)
 ​
 特点:
     1-数据大小是固定
     2-程序处理有界数据,程序最终一定会停止
  • 无界数据:

 无界数据: 指的数据有固定的开始,但是没有固定的结束。我们称之为无界数据
 注意: 对于无界数据,我们一般采用流式处理方案(实时计算)
 ​
 特点:
     1-数据没有明确的结束,也就是数据大小不固定
     2-数据是源源不断的过来
     3-程序处理无界数据,程序会一直运行不会结束

2、基本介绍

结构化流是构建在Spark SQL处理引擎之上的一个流式的处理引擎,主要是针对无界数据的处理操作。对于结构化流同样也支持多种语言操作的API:比如 Python Java Scala SQL ....

Spark的核心是RDD。RDD出现主要的目的就是提供更加高效的离线的迭代计算操作,RDD是针对的有界的数据集,但是为了能够兼容实时计算的处理场景,提供微批处理模型,本质上还是批处理,只不过批与批之间的处理间隔时间变短了,让我们感觉是在进行流式的计算操作,目前默认的微批可以达到100毫秒一次

真正的流处理引擎: Storm(早期流式处理引擎)、Flink、Flume(流式数据采集)

3、使用三大步骤

StructuredStreaming在进行数据流开发时的三个步骤

  • 1、读取数据流数据 : 指定数据源模式

    • saprksession对象.readStream.format(指定读取的数据源).option(指定读取的参数).load()

  • 2、数据处理: 使用dsl或者sql方式计算数据和SparkSQL操作一样

  • 3、将计算的结果保存 : 指定输出模式,指定位置

    • writeStream.outputMode(输出模式).option(输出的参数配置).format(指定输出位置).start().awaitTermination()

4.回顾sparkSQL的词频统计案例

 # 导包
 import os
 from pyspark.sql import SparkSession,functions as F
 ​
 # 绑定指定的python解释器
 os.environ['SPARK_HOME'] = '/export/server/spark'
 os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
 os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
 ​
 # 创建main函数
 if __name__ == '__main__':
     # 1.创建SparkContext对象
     spark = SparkSession.builder.appName('pyspark_demo').master('local[*]').getOrCreate()
 ​
     # 2.数据输入
     df = spark.read\
         .format('text')\
         .load('file:///export/data/spark_project/structured_Streaming/data/w1.txt')
 ​
     # 查看数据类型
     print(type(df))
     # 3.数据处理(切分,转换,分组聚合)
     # SQL方式
     df.createTempView('tb')
     sql_df = spark.sql("""
         select words,count(1) as cnt
         from (
           select explode(split(value,' ')) as words from tb
         ) t group by words
     """)
     # DSL方式
     dsl_df = df.select(
         F.explode(F.split('value',' ')).alias('words')
     ).groupBy('words').agg(
         F.count('words').alias('cnt')
     )
     # 4.数据输出
     sql_df.show()
     dsl_df.show()
     # 5.关闭资源
     spark.stop()
 ​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

困了就倒头睡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值