#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)