将胶水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错误写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章

将pyspark数据框写入文本文件

从集群将整数/字符串写入 pyspark 中的文本文件

Pyspark 合并两个大文本文件

胶水作业无法写入文件

将错误写入Web服务中的文本文件

将字典写入文本文件?