#apache-spark-sql #spark-jdbc
#apache-spark-sql #spark-jdbc
Вопрос:
val parquetDF = session.read.parquet("s3a://test/ovd").selectExpr("id", "topic", "update_id", "blob")
Пытаюсь прочитать файл parquet и выполнить сброс в Postgres. Один из столбцов в таблице postgres имеет тип данных JSONB, а в parquet он в формате String.
parquetDF.write.format("jdbc")
.option("driver", "org.postgresql.Driver")
.option("url", "jdbc:postgresql://localhost:5432/db_metamorphosis?binaryTransfer=trueamp;stringtype=unspecified")
.option("dbtable", "entitlements.general")
.option("user", "mdev")
.option("password", "")
.option("stringtype", "unspecified")
.mode(SaveMode.Append)
.save()
И это приводит к сбою с этой ошибкой :
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 определит тип данных для string, но, похоже, это не работает.
<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>
Комментарии:
1. Вам все-таки удалось заставить это сработать? Я сталкиваюсь с точно такой же проблемой.
2. В итоге @BrunoGasparotto вставил строки в базу данных пакетами.