Сериализация и десериализация модели в Postgres в R - PullRequest
0 голосов
/ 04 июля 2019

Хотите знать, удалось ли кому-либо успешно сериализовать и десериализовать модель R в базу данных Postgres?Я пробовал разные способы сериализации JSON, raw и т. Д. Без успеха.Я использую пакет RPostgreSQL

Псевдокод, не работает

  # SERILIZE
  fit <- lm(reading ~ ., mdata.sel)
  pgcon <- mpr.getDBConnection()

  on.exit(dbDisconnect(pgcon))

  df <- data.frame(serialize(fit,NULL))
  vector <- vector()
  vector[1] <- "poly"

  colnames(df) <- vector

  dbWriteTable(pgcon, "ptest",
               value = df , append = TRUE, row.names = FALSE)



  # UNSERIALIZE    
  rows<-dbGetQuery(pgcon, "SELECT encode(poly::bytea,'escape') from ptest")

  iter_model<-postgresqlUnescapeBytea(rows[["encode"]])

  model<-unserialize(iter_model)

РЕДАКТИРОВАТЬ

Нашел образец в Как написатьи считывать двоичные данные с помощью RPostgresql , в котором хранится модель, к сожалению, при десериализации найденного объекта она становится поврежденной

      con <- mpr.getDBConnection()

      on.exit(dbDisconnect(pgcon))

      dbGetQuery(con,"CREATE TABLE byteatable (name text NOT NULL, val bytea, PRIMARY KEY (name))")

      ser <- serialize(fit,NULL,ascii=F)
      postgresqlEscapeBytea(con, ser)
      iq <- sprintf("INSERT INTO byteatable values('%s',E'%s');","name1", postgresqlEscapeBytea(con, ser))
      dbGetQuery(con, iq)
      rows<-dbGetQuery(con, "SELECT * from byteatable")
      ser2<-postgresqlUnescapeBytea(rows[[2]])
      unserialize(ser2) # CORRUPT

1 Ответ

0 голосов
/ 04 июля 2019

Сериализация / неселерализация в JSON, похоже, работает

library(RPostgreSQL)
library(jsonlite)
mpr.test <- function(){

  con <- mpr.getDBConnection()

  on.exit(dbDisconnect(pgcon))

  dbGetQuery(con,"CREATE TABLE public.strtable(poly character varying COLLATE pg_catalog.'default'')")

  dbGetQuery(con, "DELETE FROM strtable")

  md <- mpr.measurementdata_get("bbbb") #getting meaurement data
  fit <- mpr.poly_calc(md) # lm model

  iq <- sprintf("INSERT INTO strtable values('%s');", serializeJSON(fit, digits = 8, pretty = FALSE))

  dbGetQuery(con, iq)

  rows<-dbGetQuery(con, "SELECT * from strtable")

  fit.db <- unserializeJSON(rows[[1]])


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...