我想使用JDBC连接器从pyspark应用程序上执行以下查询:
SELECT id, postgres_function(some_column) FROM my_database GROUP BY id
问题是我无法使用spark.sql(QUERY)
在PySpark上执行此类查询,这显然是因为postgres_function
不是ANSI SQL函数,因为Spark 2.0.0.
我正在使用Spark 2.0.1和Postgres 9.4。
您唯一的选择是使用子查询:
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中执行。