我正在尝试读取csv文件并将其附加到表中。对于日期列,它会抛出Timestamp format must be yyyy-mm-dd hh:mm:ss
例外。
我经历了几个解决方案,但没有一个适合我。
我正在尝试使用udf
,但它会抛出异常:
Schema for type java.util.Date is not supported
以下是我的尝试:
val dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss")
val toDate = udf[Date, String](dateFormat.parse(_))
val schema = StructType(Array(StructField("id", LongType, nullable=true), StructField("name", StringType, nullable=true), StructField("date_issued", TimestampType, nullable=true)))
var df = spark.read.schema(schema).csv("./data/test.csv")
var df2 = df.withColumn("date_issued", toDate(df("date_issued")))
df2.show()
df2.write.mode(SaveMode.Append).jdbc("jdbc:postgresql://localhost:5432/db", "card", connectionProperties)
答案 0 :(得分:1)
问题是,需要将util日期转换为sql date。
尝试以下代码。
def convertToDate(dateTime: String): Date = {
val formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss")
val utilDate = formatter.parse(dateTime)
new java.sql.Date(utilDate.getTime)
}
然后将此函数转换为UDF。
val toDate = udf(convertToDate(_: String))