Funktioniert Spark-Prädikat-Pushdown mit JDBC?

GemäßDie

Catalyst wendet logische Optimierungen an, z. B. das Pushdown von Vergleichselementen. Das Optimierungsprogramm kann Filterprädikate in die Datenquelle verschieben, sodass die physische Ausführung irrelevante Daten überspringen kann.

Spark unterstützt das Herunterschieben von Prädikaten an die Datenquelle. Ist diese Funktion auch für JDBC verfügbar / erwartet?

(Aus der Überprüfung der DB-Protokolle geht hervor, dass dies derzeit nicht das Standardverhalten ist. Die vollständige Abfrage wird an die DB übergeben, auch wenn sie später durch Funkenfilter eingeschränkt wird.)

MEHR DETAIL

Running Spark 1.5 mit PostgreSQL 9.4

Code-Auszug

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 Trace:

< 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
 AND a.attnum = vals.attnum)                                                                                                                                                                            
< 2015-09-15 07:11:40.936 EDT >LOG:  execute <unnamed>: SET extra_float_digits = 3                                                                                                                      
< 2015-09-15 07:11:40.964 EDT >LOG:  execute <unnamed>: SELECT "id","name" FROM dummy                                                                                                                   

Ich würde erwarten, dass die letzte Auswahl ein @ enthälimit 1 -Klausel - aber nicht

Antworten auf die Frage(2)

Ihre Antwort auf die Frage