创建一个简单的 RDD,并对其进行一系列转换操作。并加入函数,日志的方式
from pyspark import SparkConf, SparkContext
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 初始化 SparkContext
conf = SparkConf().setAppName("FaultToleranceAndCheckpointExample")
sc = SparkContext(conf=conf)
# 创建初始 RDD
rdd1 = sc.parallelize([1, 2, 3, 4, 5, 6], 5) # 5 个分区
# 对 RDD 进行转换,并设置检查点
rdd2 = rdd1.map(lambda x: x * 2)
# 定义一个函数来执行过滤和保存数据
def process_and_save_data(rdd):
try:
# 故意触发错误的过滤器
def faulty_filter(x):
if x == 6: # 触发错误
print("故意触发的错误")
return x > 5
filtered_rdd = rdd.filter(faulty_filter)
# 继续进行转换
final_rdd = filtered_rdd.map(lambda x: x + 1)
# 收集并打印结果
result = final_rdd.collect()
logging.info("结果收集完成")
print("结果:", result)
# 将结果保存到 HDFS
output_path = "hdfs://127.0.0.1:9001/data/output2"
final_rdd.saveAsTextFile(output_path)
logging.info("结果保存完成")
except Exception as e:
logging.error("发生错误:", exc_info=True)
print("发生错误:", str(e))
# 处理并保存数据
process_and_save_data(rdd2)
# 停止 SparkContext
sc.stop()