我想使用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。
答案 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中执行,则无关紧要。