根据这个Catalyst应用了逻辑优化,例如谓词下推。优化器可以将过滤谓词下推到数据源中,从而使物理执行可以跳过不相关的数据。Spark支持将谓词下推到数据源。JDBC是否也可以使用/预期该功能?(通过检查数据库日志,我现在可以看到它不是默认行为-完整的查询将传递到数据库,即使后来受到火花过滤器的限制)更多细节在PostgreSQL 9.4上运行Spark 1.5代码段:from pyspark import SQLContext, SparkContext, Row, SparkConffrom data_access.data_access_db import REMOTE_CONNECTIONsc = 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.adrelid) 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.atttypid = 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子句-但它不会
添加回答
举报
0/150
提交
取消