ОШИБКА: столбец «blob» имеет тип jsonb, но выражение имеет символ типа - PullRequest
0 голосов
/ 28 марта 2019
val parquetDF = session.read.parquet("s3a://test/ovd").selectExpr("id", "topic", "update_id", "blob")

Попытка прочитать файл паркета и сбросить в Postgres. Один из столбцов в таблице postgres имеет тип данных JSONB, а в паркете - в формате String.

parquetDF.write.format("jdbc")
      .option("driver", "org.postgresql.Driver")
      .option("url", "jdbc:postgresql://localhost:5432/db_metamorphosis?binaryTransfer=true&stringtype=unspecified")
      .option("dbtable", "entitlements.general")
      .option("user", "mdev")
      .option("password", "")
      .option("stringtype", "unspecified")
      .mode(SaveMode.Append)
      .save()

И это терпит неудачу с этим erorr:

Caused by: org.postgresql.util.PSQLException: ERROR: column "blob" is of type jsonb but expression is of type character
  Hint: You will need to rewrite or cast the expression.
  Position: 85
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
    ... 16 more

Кто-то на SO предложил поставить stringtype=unspecified, так как тогда Postgres определит тип данных для строки, но, похоже, он не работает.

<scala.major.version>2.12</scala.major.version>
<scala.version>${scala.major.version}.8</scala.version>
<spark.version>2.4.0</spark.version>
<postgres.version>9.4-1200-jdbc41</postgres.version>
...