переместите значение метки времени spark в столбец метки времени postgres

#postgresql #scala #apache-spark

Вопрос:

У меня есть фрейм данных(скриншот прилагается), и я хочу перенести эти значения в таблицу Postgres. Структура таблицы Postgres выглядит следующим образом. Я столкнулся с проблемой при вставке меток start_timestamp и end_timestamp в соответствующие столбцы start_time и end_time в таблице postgres.

Я использую соединение java для передачи этих значений в базу данных. Не интересуюсь подключением Spark JDBC. Пожалуйста, предложите способ вставки этих значений с помощью функции spark scala.

Я получаю ошибку ниже при запуске функции

 lt;consolegt;:64: error: type mismatch;  found : org.apache.spark.sql.types.TimestampType  required: java.sql.Timestamp  ps.setTimestamp(2,startTimestamp)  ^ lt;consolegt;:65: error: type mismatch;  found : org.apache.spark.sql.types.TimestampType  required: java.sql.Timestamp  ps.setTimestamp(3,endTimestamp)  ^   
 def pushDataToDB(processName:String,  processDesc:String,  startTimestamp:TimestampType,  endTimestamp:TimestampType,  schemaTableName:String,  userName:String,  passwrod:String,  dbType:String,  dbHost:String,  dbPort:Int,  dbDatabase:String  )  {  println("In pushDataToDB function")    val db_conn_string = "jdbc:"   dbType   "://"   dbHost   ":"   dbPort   "/"   dbDatabase  val connection = DriverManager.getConnection(db_conn_string,userName,passwrod)  val ps = connection.prepareStatement(insert_sql)  ps.setString(1,processName)  ps.setTimestamp(2,startTimestamp)  ps.setTimestamp(3,endTimestamp)  ps.setString(4,processDesc)  val recs_inserted=ps.executeUpdate()   connection.close()  }   

структура таблицы postgres

 process_nm character varying(512), start_time timestamp with timezone, end_time timestamp with timezone, process_desc character varying(512)  

Фрейм данных Spark

введите описание изображения здесь

Комментарии:

1. вы можете использовать ps.setObject(2,startTimestamp) , и это должно сработать, но если ваши столбцы с метками времени имеют нулевые значения, вам придется указать их отдельно для нулевых и ненулевых значений. для нулевого значения вам придется сделать : ps.setNull(2, java.sql.Types.TIMESTAMP)