将胶水pyspark错误写入文本文件
Posted
技术标签:
【中文标题】将胶水pyspark错误写入文本文件【英文标题】:write glue pypspark errors to text file 【发布时间】:2019-11-10 05:59:42 【问题描述】:我正在尝试在我的代码中添加一些错误处理。我在 aws 胶水作业中运行 pyspark 代码。我想做的是在出现错误时创建一个文本文件,然后将一条短消息和错误写入文本文件。我有一个我在下面尝试过的例子。当我运行 try/except 代码时,它返回一个错误,即没有这样的文件或目录。我想出的解决方法是创建一个动态框架并向其中添加一个列,并将错误消息作为字符串。我不得不认为有一种更简单的方法可以做到这一点。有谁知道更好的方法将错误消息写入文本文件作为胶水 pyspark 中的 try/except 块的一部分?
示例代码:
for i in [1,0,3]:
try:
print(1/i)
except Exception as e:
logf=open('s3://xxxx/error_logs/error_test.log',"a")
logf.write("failed 0: 1\n".format(str(i), str(e)))
logf.close()
print(e)
pass
解决写出到 csv 的代码:
log_txt = glueContext.create_dynamic_frame_from_options("s3", 'paths': ["s3://xxxx/error_logs/"] , format="csv" )
log_txt_df=log_txt.toDF()
log_txt_df=log_txt_df.withColumn('try',lit('test'))
log_txt_df.show()
【问题讨论】:
你应该使用 boto3 s3 apis 来访问 s3 而不是 python 文件 apis 【参考方案1】:import boto3
error_message = "your error message"
s3_resource = boto3.resource('s3')
s3_resource.Object(bucket, file_key).put(Body=error_message )
每当抛出错误时,将错误保存在对象中并将其写入文件。 这里的bucket = s3 的bucket 名称,而file_key = 文件的名称和路径。
【讨论】:
请围绕您的答案提供上下文,以避免现在和将来的“低质量”审查。 (审查结束)。以上是关于将胶水pyspark错误写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章