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

时间:2016-06-06 14:28:01

标签: 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: Unsupported type 1111

有没有办法让它发挥作用?

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

1 个答案:

答案 0 :(得分:4)

不幸的是,Spark SQL不知道Geometry类型[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