使用 PySpark 从 SQLite 解析日期时出错

Error parsing date from SQLite with PySpark

我正在尝试从 SQLite 数据库文件中读取一些 tables 以将它们与 PySpark 一起使用。我正在使用以下代码,它适用于不包含日期的 tables。

df = spark.read.format('jdbc') \
        .options(driver='org.sqlite.JDBC', dbtable='table_name',
                 url='jdbc:sqlite:/path/to/database.db')\
        .load()

df.createOrReplaceTempView("table_name")
spark.sql("select * from table_name").show(n=5)
df.printSchema()

//Exit
root
 |-- id: integer (nullable = true)
 |-- initial_date: date (nullable = true)
 |-- final_date: date (nullable = true)
 |-- ref_id: string (nullable = true)

当 table 包含日期时就会出现问题。尝试执行 spark.sql("select * from table_name").show(n=5)

时出现解析日期错误

原因:java.sql.SQLException:解析日期时出错

原因:java.text.ParseException:无法解析的日期:“2019-12-18”不匹配 (\p{Nd}++)\Q-\E(\p{Nd}++)\Q-\E(\p{Nd}++)\Q \E(\p{Nd}++)\Q:\E(\p{Nd}++ )\Q:\E(\p{Nd}++)\Q.\E(\p{Nd}++)

¿如何将日期解析为 PySpark 的有效格式?

最终有效的解决方案是使用选项 customSchema 将字段读取为字符串。

df = spark.read.format('jdbc') \
        .options(driver='org.sqlite.JDBC', dbtable='table_name',
                 url='jdbc:sqlite:/path/to/database.db')\
        .option("customSchema", "column1 STRING, column2 STRING")\
        .load()