【问题标题】:How to remotely execute a Postgres SQL function on Postgres using PySpark JDBC connector?如何使用 PySpark JDBC 连接器在 Postgres 上远程执行 Postgres SQL 函数?
【发布时间】:2017-04-09 22:38:17
【问题描述】:
我想使用 JDBC connector 从 PySpark 应用程序在远程 Postgres 服务器上执行以下查询:
SELECT id, postgres_function(some_column) FROM my_database GROUP BY id
问题是我无法在 Pyspark 上使用 spark.sql(QUERY) 执行这种查询,显然是因为 postgres_function 不是 ANSI SQL 函数 supported since Spark 2.0.0。
我使用的是 Spark 2.0.1 和 Postgres 9.4。
【问题讨论】:
标签:
postgresql
apache-spark
jdbc
pyspark
apache-spark-sql
【解决方案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 中执行 spark.sql 中调用的所有函数。