【发布时间】:2018-01-17 16:18:38
【问题描述】:
我有一个带有 Postgis 扩展的 PostgreSQL 数据库,所以我可以进行如下查询:
SELECT *
FROM poi_table
WHERE (ST_DistanceSphere(the_geom, ST_GeomFromText('POINT(121.37796 31.208297)', 4326)) < 6000)
使用 Spark SQL,我可以在我的 Spark 应用程序(在 Scala 中)中查询表,例如:
spark.sql("select the_geom from poi_table where the_geom is not null").show
问题是,Spark SQL 不支持 Postgis 扩展。比如我使用Postgis函数ST_DistanceSphere查询表时,出现这样的错误:
scala> spark.sql("select * FROM poi_table WHERE (ST_DistanceSphere(the_geom, ST_GeomFromText('POINT(121.37796 31.208297)', 4326)) < 60)")
org.apache.spark.sql.AnalysisException: Undefined function: 'ST_DistanceSphere'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 65
at
...
使用 Python,我可以创建一个 Postgresql 连接并将此查询发送到 Postgresql 服务器以执行它。
那么,在 Spark/Scala 中是否有类似的解决方法?
或者更好的是,我可以使用任何 jar 来启用支持 Postgis 扩展的 Spark SQL?
【问题讨论】:
标签: postgresql apache-spark postgis