无法将 aws 胶水动态帧转换为火花数据帧

Posted

技术标签:

【中文标题】无法将 aws 胶水动态帧转换为火花数据帧【英文标题】:Unable to convert aws glue dynamicframe into spark dataframe 【发布时间】:2021-01-01 22:38:04 【问题描述】:

我正在尝试使用 Dynamicframe.toDF 将胶水动态帧转换为火花数据帧,但我遇到了这个异常

Traceback(最近一次调用最后一次):文件“/tmp/ManualJOB”,第 62 行, 在 df1 = datasource0.toDF() 文件“/opt/amazon/lib/python3.6/site-packages/awsglue/dynamicframe.py”, 第 147 行,在 toDF 中 返回数据帧(self._jdf.toDF(self.glue_ctx._jvm.PythonUtils.toSeq(scala_options)), self.glue_ctx) 文件 "/opt/amazon/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", 第 1257 行,在 调用 答案,self.gateway_client,self.target_id,self.name)文件“/opt/amazon/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,行 63,在装饰 返回 f(*a, **kw) 文件“/opt/amazon/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”, 第 328 行,在 get_return_value 中 format(target_id, ".", name), value) py4j.protocol.Py4JJavaError: 调用 o176.toDF 时出错。 : org.apache.spark.SparkException:作业因阶段失败而中止: 阶段 15.0 中的任务 1 失败 4 次,最近一次失败:丢失任务 15.0 阶段的 1.3(TID 198、172.31.0.175、执行程序 6):com.amazonaws.services.glue.util.FatalException:无法解析文件:Manual Bound.csv

谁能帮我解决我所缺少的问题?

提前致谢!

【问题讨论】:

您能否确认您的文件 Manual Bound.csv 是否没有 utf-8 以外的字符? Glue 只支持 utf-8 编码。检查你的文件 iconv -f UTF-8 your_file -o /dev/null;回声$?如果它有非 utf-8 字符? 是的。除了 utf-8 之外,还有一些字符。所以这就是问题所在。谢谢@PrabhakarReddy 我已经发布了答案。如果有帮助,请将其标记为已回答。 【参考方案1】:

当存在非 UTF-8 编码的字符时会出现此问题。根据this doc,Glue 仅支持 UTF-8 编码。

基于文本的数据(例如 CSV)必须以 UTF-8 编码,AWS Glue 才能成功处理它。有关详细信息,请参阅 Wikipedia 中的 UTF-8。

您可以通过运行以下命令来验证您的文件是否包含无效字符,该命令将打印它们。这是针对 linux 的,如果您使用其他操作系统,则可以使用等效字符。

iconv -f UTF-8 your_file -o /dev/null; echo $?

要转换为 UTF-8,您可以将 CSV 传递给以下命令

iconv -f ISO-8859-1 -t UTF-8 file.csv > file-utf8.csv

【讨论】:

以上是关于无法将 aws 胶水动态帧转换为火花数据帧的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫数据帧转换为火花数据帧时收到错误

如何将火花数据帧数组转换为元组

如何将火花流输出转换为数据帧或存储在表中

将火花数据帧中的日期时间时间戳转换为 epocTimestamp

如何在火花上将json字符串转换为数据帧

将字符串格式的科学记数法转换为火花数据帧中的数字[重复]