猿问

Spark谓词下推是否与JDBC一起使用?

根据这个


Catalyst应用了逻辑优化,例如谓词下推。优化器可以将过滤谓词下推到数据源中,从而使物理执行可以跳过不相关的数据。


Spark支持将谓词下推到数据源。JDBC是否也可以使用/预期该功能?


(通过检查数据库日志,我现在可以看到它不是默认行为-完整的查询将传递到数据库,即使后来受到火花过滤器的限制)


更多细节


在PostgreSQL 9.4上运行Spark 1.5


代码段:


from pyspark import SQLContext, SparkContext, Row, SparkConf

from data_access.data_access_db import REMOTE_CONNECTION


sc = SparkContext()

sqlContext = SQLContext(sc)


url = 'jdbc:postgresql://{host}/{database}?user={user}&password={password}'.format(**REMOTE_CONNECTION)

sql = "dummy"


df = sqlContext.read.jdbc(url=url, table=sql)

df = df.limit(1)

df.show()

SQL跟踪:


< 2015-09-15 07:11:37.718 EDT >LOG:  execute <unnamed>: SET extra_float_digits = 3                                                                                                                      

< 2015-09-15 07:11:37.771 EDT >LOG:  execute <unnamed>: SELECT * FROM dummy WHERE 1=0                                                                                                                   

< 2015-09-15 07:11:37.830 EDT >LOG:  execute <unnamed>: SELECT c.oid, a.attnum, a.attname, c.relname, n.nspname, a.attnotnull OR (t.typtype = 'd' AND t.typnotnull), pg_catalog.pg_get_expr(d.adbin, d.a

drelid) LIKE '%nextval(%' FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON (c.relnamespace = n.oid) JOIN pg_catalog.pg_attribute a ON (c.oid = a.attrelid) JOIN pg_catalog.pg_type t ON (a.a

tttypid = t.oid) LEFT JOIN pg_catalog.pg_attrdef d ON (d.adrelid = a.attrelid AND d.adnum = a.attnum) JOIN (SELECT 15218474 AS oid , 1 AS attnum UNION ALL SELECT 15218474, 3) vals ON (c.oid = vals.oid

                                                                                                                                                                                                       

我希望最后一个选择将包含一个limit 1子句-但它不会


www说
浏览 490回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答