Mysql 如何处理';0000-00-00';在AWS胶水-Pypark中
我使用AWS胶水读取AWS Aurora DB(MySQL)表并写入S3文件。MySQL表具有日期列值“0000-00-00”,这在MySQL中是允许的。因此,我的胶水作业(PySpark)失败了。如何在胶水代码中处理这个问题 我尝试过但失败了Mysql 如何处理';0000-00-00';在AWS胶水-Pypark中,mysql,amazon-web-services,apache-spark,pyspark,aws-glue,Mysql,Amazon Web Services,Apache Spark,Pyspark,Aws Glue,我使用AWS胶水读取AWS Aurora DB(MySQL)表并写入S3文件。MySQL表具有日期列值“0000-00-00”,这在MySQL中是允许的。因此,我的胶水作业(PySpark)失败了。如何在胶水代码中处理这个问题 我尝试过但失败了 追加jdbc:mysql://?zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8 从PySpar
df.drop(df[“日期列”)
Traceback (most recent call last):
File "script_2018-08-03-21-41-06.py", line 107, in <module>
total_record_count=datasourceDF0.count()
File "/mnt/yarn/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/pyspark.zip/pyspark/sql/dataframe.py", line 427, in count
File "/mnt/yarn/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
File "/mnt/yarn/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
File "/mnt/yarn/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o335.count.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 7.0 failed 4 times, most recent failure: Lost task 0.3 in stage 7.0 (TID 21, ip-172-24-120-182.us-west-2.compute.internal, executor 1): java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
at com.mysql.jdbc.ResultSetRow.getNativeTimestamp(ResultSetRow.java:606)
at com.mysql.jdbc.ByteArrayRow.getNativeTimestamp(ByteArrayRow.java:187)
at com.mysql.jdbc.ResultSetImpl.getNativeTimestamp(ResultSetImpl.java:4309)
at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:5929)
at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5609)
回溯(最近一次呼叫最后一次):
文件“script_2018-08-03-21-41-06.py”,第107行,在
总记录计数=datasourceDF0.count()
文件“/mnt/thread/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/pyspark.zip/pyspark/sql/dataframe.py”,第427行,计数
文件“/mnt/thread/usercache/root/appcache/application_1533330570684_0005/container_1533330570684_0005_01_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py”,第1133行,在__
文件“/mnt/thread/usercache/root/appcache/application\u 1533330570684\u 0005/container\u 1533330570684\u 0005\u 01\u000001/pyspark.zip/pyspark/sql/utils.py”,第63行,装饰
文件“/mnt/thread/usercache/root/appcache/application\u 1533330570684\u 0005/container\u 1533330570684\u 0005\u 01\u000001/py4j-0.10.4-src.zip/py4j/protocol.py”,第319行,在get\u返回值中
py4j.protocol.Py4JJavaError:调用o335.count时出错。
:org.apache.spark.sparkeexception:作业因阶段失败而中止:阶段7.0中的任务0失败4次,最近的失败:阶段7.0中的任务0.3丢失(TID 21,ip-172-24-120-182.us-west-2.compute.internal,executor 1):java.sql.SQLException:值“0000-00-00”不能表示为java.sql.Timestamp
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
位于com.mysql.jdbc.resultstrow.getNativeTimestamp(resultstrow.java:606)
位于com.mysql.jdbc.ByteArrayRow.getNativeTimestamp(ByteArrayRow.java:187)
位于com.mysql.jdbc.ResultSetImpl.getNativeTimestamp(ResultSetImpl.java:4309)
位于com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:5929)
位于com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5609)
验证字段在crownler表架构中设置的格式。将其设置为字符串。这样你就不会再有解析错误了。
使用函数df选择列。选择expr()
并根据需要格式化数据。
一些Spark SQL表达式:
ApplyMapping
transform函数中删除data\u列
?是的。我删除了ApplyMapping转换中的date_列。它不起作用。我只传递ApplyMapping()中所需的列。所需的列包含日期为00的日期表。即使我删除了这些列,也会出现错误。看起来像glueContext.create_dynamic_frame.from_catalog()方法读取MySQL表中的所有列,并忽略Glue Data catalog中定义的表。