Python PySpark jdbc谓词错误:Py4JError:调用o108.jdbc时出错

Python PySpark jdbc谓词错误:Py4JError:调用o108.jdbc时出错,python,apache-spark,apache-spark-sql,pyspark,pyspark-sql,Python,Apache Spark,Apache Spark Sql,Pyspark,Pyspark Sql,我试图在我的方法中使用谓词: 但是,我遇到了以下错误: --------------------------------------------------------------------------- Py4JError Traceback (most recent call last) ... Py4JError: An error occurred while calling o108.jdbc. Trace: py4j

我试图在我的方法中使用谓词:

但是,我遇到了以下错误:

---------------------------------------------------------------------------
Py4JError                                 Traceback (most recent call last)
...

Py4JError: An error occurred while calling o108.jdbc. Trace:
py4j.Py4JException: Method jdbc([class java.lang.String, class java.lang.String, class [Ljava.lang.Object;, class java.util.Properties]) does not exist

如何向jdbc方法调用添加谓词?

这里至少有两个问题。其中一个看起来像PySpark bug,据我所知,它已经在当前主程序中解决了

另一个问题是您使用的条件。它应该是简单的
'BRANCH\u code=5'
而不是
'wherebranch\u code=5'

最后,如果只使用一个谓词,则将其作为子查询传递会更有意义,如下所示:

df = sqlContext.read.jdbc( 
    url = url,
    table = "(SELECT * FROM GOSALES.BRANCH WHERE BRANCH_CODE=5) AS tmp")
带有
谓词的JDBC查询
为每个谓词创建一个单独的JDBC分区,因此很难进行调优。更不用说你必须记住可能的重复

df = sqlContext.read.jdbc( 
    url = url,
    table = "(SELECT * FROM GOSALES.BRANCH WHERE BRANCH_CODE=5) AS tmp")