章节测验---7

第2关:第二题

任务描述

本关任务:根据编程要求,完成任务。

编程要求

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

from functools import partial
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
################ Begin ################
# 创建SparkSession
spark = SparkSession \
    .builder \
    .appName("StructuredSyslog") \
    .getOrCreate()
# 读取实时数据
lines = spark \
    .readStream \
    .format("socket") \
    .option("host", "localhost") \
    .option("port", 8888) \
    .load()
# 定义一个偏应用函数,从固定的 pattern 获取日志内匹配的字段
fields = partial(
    regexp_extract, str="value", pattern="^(\w{3}\s*\d{1,2} \d{2}:\d{2}:\d{2}) (.*?) (.*?)\[*\d*\]*: (.*)$"
)
words = lines.select(
    to_timestamp(format_string('2019 %s', fields(idx=1)), 'yy MMM d H:m:s').alias("timestamp"),
    fields(idx=2).alias("hostname"),
    fields(idx=3).alias("tag"),
    fields(idx=4).alias("content"),
)
# 统计 CRON 这个进程每小时生成的日志数,并以时间顺序排列,水印设置为 1 分钟
windowedCounts1 = words \
    .filter("tag = 'CRON'") \
    .withWatermark("timestamp", "1 minutes") \
    .groupBy(window('timestamp', "1 hour")) \
    .count() \
    .sort(asc('window'))
# 开始运行查询并在控制台输出
query = windowedCounts1 \
    .writeStream \
    .outputMode("complete") \
    .format("console") \
    .option('truncate', 'false')\
    .trigger(processingTime="10 seconds") \
    .start()
# 设置最长等待时长
query.awaitTermination(70)
################ End ################ 

第3关:第三题

任务描述

本关任务:根据编程要求,完成任务。

编程要求

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

from functools import partial
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
################ Begin ################
# 创建SparkSession
spark = SparkSession \
    .builder \
    .appName("StructuredSyslog") \
    .getOrCreate()
# 读取实时数据
lines = spark \
    .readStream \
    .format("socket") \
    .option("host", "localhost") \
    .option("port", 7777) \
    .load()
# 定义一个偏应用函数,从固定的 pattern 获取日志内匹配的字段
fields = partial(
    regexp_extract, str="value", pattern="^(\w{3}\s*\d{1,2} \d{2}:\d{2}:\d{2}) (.*?) (.*?)\[*\d*\]*: (.*)$"
)
words = lines.select(
    to_timestamp(format_string('2019 %s', fields(idx=1)), 'yy MMM d H:m:s').alias("timestamp"),
    fields(idx=2).alias("hostname"),
    fields(idx=3).alias("tag"),
    fields(idx=4).alias("content"),
)
# 统计每小时的每个进程或者服务分别产生的日志总数,水印设置为 1 分钟
windowedCounts2 = words \
    .withWatermark("timestamp", "1 minutes") \
    .groupBy('tag', window('timestamp', "1 hour")) \
    .count() \
    .sort(asc('window'))
# 开始运行查询并在控制台输出
query = windowedCounts2 \
    .writeStream \
    .outputMode("complete") \
    .format("console") \
    .option('truncate', 'false')\
    .trigger(processingTime="10 seconds") \
    .start()
# 设置最长等待时长
query.awaitTermination(70)
################ End ################

第4关:第四题

任务描述

本关任务:根据编程要求,完成任务。

编程要求

打开右侧代码文件窗口,在 BeginEnd 区域补充代码,完成任务。

from functools import partial
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
################ Begin ################
# 创建SparkSession
spark = SparkSession \
    .builder \
    .appName("StructuredSyslog") \
    .getOrCreate()
# 读取实时数据
lines = spark \
    .readStream \
    .format("socket") \
    .option("host", "localhost") \
    .option("port", 6666) \
    .load()
# 定义一个偏应用函数,从固定的 pattern 获取日志内匹配的字段
fields = partial(
    regexp_extract, str="value", pattern="^(\w{3}\s*\d{1,2} \d{2}:\d{2}:\d{2}) (.*?) (.*?)\[*\d*\]*: (.*)$"
)
words = lines.select(
    to_timestamp(format_string('2019 %s', fields(idx=1)), 'yy MMM d H:m:s').alias("timestamp"),
    fields(idx=2).alias("hostname"),
    fields(idx=3).alias("tag"),
    fields(idx=4).alias("content"),
)
# 输出所有日志内容带 error 的日志
windowedCounts3 = words \
    .filter("content like '%error%'")
# 开始运行查询并在控制台输出
query = windowedCounts3 \
    .writeStream \
    .outputMode("update") \
    .format("console") \
    .option('truncate', 'false')\
    .trigger(processingTime="10 seconds") \
    .start()
# 设置最长等待时长
query.awaitTermination(70)
################ End ################

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值