Ошибка предикатов PySpark jdbc: Py4JError: произошла ошибка при вызове o108.jdbc

Я пытаюсь использовать предикаты в своем Метод 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?


person Chris Snow    schedule 13.11.2015    source источник


Ответы (1)


Здесь как минимум две проблемы. Один из них выглядит как ошибка 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")

Запрос JDBC с predicates создает один раздел JDBC для каждого предиката, поэтому его гораздо сложнее настроить. Не говоря уже о том, что вы должны помнить о возможных дубликатах.

person zero323    schedule 25.11.2015