Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何处理';0000-00-00';在AWS胶水-Pypark中_Mysql_Amazon Web Services_Apache Spark_Pyspark_Aws Glue - Fatal编程技术网

Mysql 如何处理';0000-00-00';在AWS胶水-Pypark中

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

我使用AWS胶水读取AWS Aurora DB(MySQL)表并写入S3文件。MySQL表具有日期列值“0000-00-00”,这在MySQL中是允许的。因此,我的胶水作业(PySpark)失败了。如何在胶水代码中处理这个问题

我尝试过但失败了

  • 追加jdbc:mysql://?zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8

  • 从PySpark代码中的DynamicFrame或Dataframe中删除日期列。 例如:
    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表达式:


    我已经在胶水连接(#1)中尝试过,但失败了。非常感谢。这篇文章很有帮助。您是否尝试过在
    ApplyMapping
    transform函数中删除
    data\u列
    ?是的。我删除了ApplyMapping转换中的date_列。它不起作用。我只传递ApplyMapping()中所需的列。所需的列包含日期为00的日期表。即使我删除了这些列,也会出现错误。看起来像glueContext.create_dynamic_frame.from_catalog()方法读取MySQL表中的所有列,并忽略Glue Data catalog中定义的表。