Skip to main content
 首页 » 编程设计

python之PySpark jdbc 谓词错误 : Py4JError: An error occurred while calling o108. jdbc

2024年08月23日37bluestorm

我正在尝试在我的 DataFrameReader.jdbc() 中使用谓词方法:

df = sqlContext.read.jdbc( 
    url="jdbc:db2://bluemix05.bluforcloud.com:50001/BLUDB:user=****;password=****;sslConnection=true;",   
    table="GOSALES.BRANCH", 
    predicates=['WHERE BRANCH_CODE=5'] 
).cache() 

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

--------------------------------------------------------------------------- 
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 错误,据我所知,目前的主人已经解决了。

另一个问题是您使用的条件。它应该只是 'BRANCH_CODE = 5' 而不是 'WHERE BRANCH_CODE = 5'。

最后,如果您只使用一个谓词,将它作为子查询传递更有意义:

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

使用 predicates 的 JDBC 查询为每个谓词创建一个 JDBC 分区,因此更难调整。更不用说您还必须记住可能的重复项。