如何使用PySpark JDBC连接器在Postgres上远程执行Postgres SQL函数?

时间:2016-11-25 13:47:17

标签: postgresql apache-spark jdbc pyspark apache-spark-sql

我想使用JDBC connector从PySpark应用程序在远程Postgres服务器上执行以下查询:

SELECT id, postgres_function(some_column) FROM my_database GROUP BY id

问题是我无法使用spark.sql(QUERY)在Pyspark上执行此类查询,显然是因为postgres_function不是ANSI SQL函数supported since Spark 2.0.0

我正在使用Spark 2.0.1和Postgres 9.4。

1 个答案:

答案 0 :(得分:1)

您唯一的选择是使用子查询:

table = """
  (SELECT id, postgres_function(some_column) FROM my_database GROUP BY id) AS t
"""
sqlContext.read.jdbc(url=url, table=table)

但这将在数据库端执行整个查询,包括聚合,并获取结果。

一般情况下,如果函数是ANSI SQL函数,或者它在源数据库中具有等效函数并且spark.sql中调用的ll函数在获取数据后在Spark中执行,则无关紧要。