- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 Spark 数据集写入现有的 postgresql 表(无法更改列类型等表元数据)。此表的其中一列的类型为 HStore它造成了麻烦。
启动写入时我看到以下异常(此处原始映射为空,转义时给出空字符串):
Caused by: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO part_d3da09549b713bbdcd95eb6095f929c8 (.., "my_hstore_column", ..) VALUES (..,'',..) was aborted. Call getNextException to see the cause.
at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:136)
at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:419)
at org.postgresql.core.v3.QueryExecutorImpl$ErrorTrackingResultHandler.handleError(QueryExecutorImpl.java:308)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2004)
at org.postgresql.core.v3.QueryExecutorImpl.flushIfDeadlockRisk(QueryExecutorImpl.java:1187)
at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1212)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:1019)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:222)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:300)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:299)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:902)
at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:902)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1899)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1899)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:86)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.postgresql.util.PSQLException: ERROR: column "my_hstore_column" is of type hstore but expression is of type character varying
我是这样做的:
def escapePgHstore[A, B](hmap: Map[A, B]) = {
hmap.map{case(key, value) => s""" "${key}"=>${value} """}.mkString(",")
}
...
val props = new Properties()
props.put("user", "xxxxxxx")
props.put("password", "xxxxxxx")
ds.withColumn("my_hstore_column", escape_pg_hstore_udf($"original_column"))
.drop("original_column")
.coalesce(1).write
.mode(org.apache.spark.sql.SaveMode.Append)
.option("driver", "org.postgresql.Driver")
.jdbc(jdbcUrl, hashedTablePartName, props)
如果我不使用 escapePgHstore
将 original_column
从 Map[String, Long] 转义为 String,我会看到以下错误:
java.lang.IllegalArgumentException: Can't get JDBC type for map<string,bigint>
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType$2.apply(JdbcUtils.scala:137)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType$2.apply(JdbcUtils.scala:137)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType(JdbcUtils.scala:136)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$7.apply(JdbcUtils.scala:293)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$7.apply(JdbcUtils.scala:292)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.saveTable(JdbcUtils.scala:292)
at org.apache.spark.sql.DataFrameWriter.jdbc(DataFrameWriter.scala:441)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
使 spark 写入有效的 hstore 数据类型的正确方法是什么?
最佳答案
事实证明,我只需要让 postgres 尝试猜测我的专栏的适当类型。通过在连接字符串中将 stringtype
设置为 unspecified
,如 official documentation 中所述.
props.put("stringtype", "unspecified")
现在它完美运行了!!
关于postgresql - 如何使用 Spark 数据集写入 PostgreSQL hstore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973909/
Postgres 新手,使用 v9.3,想利用 hstore。 当我尝试连接两个 hstore 值时,出现奇怪的错误: SELECT p.properties->'name' || p.propert
我有一个定期用新数据更新的汇总表。其中一列是 hstore 类型。当我更新新数据时,如果键存在,我想将键的值添加到键的现有值,否则我想将对添加到 hstore。 现有数据: id sum
我在数据库中有一个现有模型。我想用一个 hstore 字段来增强它。我安装了 hstore Postgres 扩展,django-hstore 应用程序,更改了 django 项目中的适当设置: SO
我正在查询 pgsql 数据库以查找在 hstore 字段中具有特定键的行: select DISTINCT from (select id, exist(data, ‘exercise_quiz’)
我通过以下方式在我的 MacOS X 上安装了 RubyOnRails 4.1.4 和 PostgreSQL: brew install postgresql 当我尝试迁移这个时: CREATE EX
当我运行 Django 服务器时,出现以下错误: class HStoreDescriptor(models.fields.subclassing.Creator): AttributeErr
我需要让 Hstore 为我正在处理的 Rails 应用程序工作。我正在运行 Linux Mint 18 和 psql(9.6.1,服务器 9.5.5)和 postgresql-contrib 9.6
在我的实际项目中,我正沉浸在“大数据”问题中。我们需要存储一个大数据库,其中读取性能比写入更重要(数据更改最少且受控)。 有数百万个寄存器,每个寄存器都有很多键/值信息。 我正在测试 noSQL 数据
我正在使用 Postgresql V 9.1: SELECT 'k=>name, v=>Nava Ratna Secondary School'::hstore; 此代码返回错误: ERROR: S
我想知道在 PostgreSQL 中是否可以遍历当前函数的所有可用输入参数并将这些参数 (key=>value) 附加到 hstore 变量。 hstore-key = 给定输入参数/参数的名称...
我在这里问了类似的问题:hstore value with space。并由用户解决:Clodoaldo Neto。现在我遇到了下一个包含单引号的字符串的情况。 SELECT 'k=>"name",
假设我有一个博客数据库,其中 posts 表将标签存储在 hstore 中。 键代表标签 ID,值是标签名称。 例如:1=>'测试', 56=>'SQL', 42=>'Java' 我想在带有标签过滤器
我发现这个查询: SELECT properties->'somekey' IS NOT DISTINCT FROM 'someValue' FROM myTable; 在 PostgreSQL 9.
我正在使用 PostgreSQL 9.4。我需要将子查询转换为 hstore。我有这个查询:select code, value_string from dir。它返回 code | value_s
我在决定使用哪种方法时遇到了一些麻烦。 我有几个实体“类型”,我们称它们为 A、B 和 C,它们共享一定数量的属性(大约 10-15 个)。我创建了一个名为 ENTITIES 的表,并为每个公共(pu
我想在 hstore 列中的特定键上创建唯一索引或约束(如果该键存在)。我希望能在另一个问题的某处找到答案: Practical limitations of expression indexes i
当我在不传递任何参数的 Django 模型中使用 hstore.DictionaryField() 并在 Djano 管理中注册我的模型时,我可以在管理界面中即时创建新的键值对行。 当我在模式模式下使
尝试将 hstore (postgreql) 中的值插入到更通用的表中 在我的汽车表中,我有这些字段 id fields (hstore) 我的存储表,我有这些字段 id key value car_
我想知道是否有人知道这个在 PostgreSQL 9.2 中的 hstore 列上的简单查询出了什么问题 查询在 pgAdmin 中运行 select attributeValue->"CODE_MU
假设我有一个定义如下的表: CREATE TABLE test ( values HSTORE NOT NULL ); 想象一下,我插入了几条记录,结果如下: values -----------
我是一名优秀的程序员,十分优秀!