尝试使用 pyspark 从 JDBC读取。在 JDBC 中,有一列 FEC_PART 作为日期类型,格式为 yyyymmdd。对于读取,参数upperBound或lowerBound与所需格式yyyymmdd不匹配:
- 使用所需的格式yyyymmdd,出现无法识别日期格式的错误:
pyspark.sql.utils.IllegalArgumentException: Cannot parse the bound value 20200112 as date
- 格式为yyyy-mm-dd,与 JDBC 中 FEC_PART 的格式不匹配。它显示此错误
java.sql.SQLDataException: ORA-01861: literal does not match format string
:WHERE "ARQPIB_FEC_PART" < '2020-01-13' or "ARQPIB_FEC_PART" is null , Error Msg = ORA-01861: literal does not match format string
使用spark进行read.load()时出现错误。
input_data = spark.read \
.format(constants.FORMAT_JDBC) \
.options(**properties) \
.option("partitionColumn", "FEC_PART") # Keep partition column as it is
.option("lowerBound", "20200112") # Use the yyyymmdd format for bounds to match partitionColumn
.option("upperBound", "20200114") # Use the yyyymmdd format for bounds to match partitionColumn
.option("numPartitions", "2") \
.load()
第一种方法。尝试添加此选项:
.option("oracle.jdbc.mapDateToTimestamp", "false")
.option("sessionInitStatement", "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD'")
采用另一种选择的第二种方法:
.option("dateFormat", "yyyyMMdd")
又尝试了一些方法,但都没有任何结果。
它对我的工作原理与您的方法 1) 非常相似,但将日期格式从 YYYYMMDD 更改为:YYYY-MM-DD,因此:
然后传递文字如下: