postgresql - 有没有办法使用 Postgis 几何类型将 Spark 连接到表?

标签 postgresql apache-spark postgis apache-spark-sql

我正在尝试使用 Postgis 将 Spark 连接到 PostgreSQL 数据库。
我这样连接:

 val jdbcDF = sc.read.format("jdbc").options(
      Map("url" -> "jdbc:postgresql://dbHost:5432/ticketapp?user=user&password=password",
        "dbtable" -> "events",
      "columnNames" -> "name")
    ).load()

问题是 Spark 不知道 Geometry 类型。 (我收到以下错误:SQLException:不支持的类型 1111)

有办法让它发挥作用吗?

如果没有,是否有办法在不使用有问题的几何类型字段的情况下仍然连接到该表?我可以排除该字段以便使其正常工作而不必转储没有该字段的表吗?

最佳答案

不幸的是,Spark SQL 不知道几何类型 [1, 2]。如果您不需要有问题的字段,可以将其排除。

使用jdbc,您可以指定一个子查询,后跟临时表名,而不仅仅是表名[3]。如果您希望选择表的子集,或者在这种情况下排除字段,这非常有用。由于 SQL 中无法选择表中除某些列之外的所有列 [4],因此您需要显式列出要保留的列,如下所示:

val jdbcDF = sc.read.format("jdbc").options(
  Map("url" -> "jdbc:postgresql://dbHost:5432/ticketapp?user=user&password=password",
      "dbtable" -> "(select col1,col2 from events) tmp")
).load()

[1] https://issues.apache.org/jira/browse/SPARK-11526
[2]https://github.com/harsha2010/magellan/issues/31
[3]http://metricbrew.com/get-data-from-databases-with-apache-spark-jdbc/
[4]http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

关于postgresql - 有没有办法使用 Postgis 几何类型将 Spark 连接到表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660029/

相关文章:

sql - 在go中参数化sql查询

mysql - 数据类型为日期的索引列

ruby-on-rails - 如何使用 Rails #order 方法避免 SQL 注入(inject)

postgresql - 返回数据库结果集的PlPgsql函数

返回查询的函数的 PostgreSQL 结构

postgresql - 在postgresql中检索时间戳

sql - 从 PostGIS 中的 BBOX 坐标创建多边形几何

Scala sbt 控制台(启动菊石外壳): How to Disable debug logging

apache-spark - Pyspark 中的环境变量

scala - Spark 在多节点上将 Parquet 写入HDFS非常慢