Я пытаюсь установить соединение, используя PySpark и MySQL (соединение JCDB). Я делаю в нем ЛОКАЛЬНОЕ. Я просто хочу проверить и поиграть. Я следую этому посту (https://medium.com/@GalarnykMichael / install-spark- on- windows -pyspark-4498a5d8d66 c) и на самом деле все работает, пока я не попытаюсь прочитать базу данных mysql. здесь код:
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local').\
config('spark.jars.packages', 'mysql:mysql-connector-java:5.1.44').\
appName('test').getOrCreate()
df = spark.read.format('jdbc').\
option('url', 'jdbc:mysql://xx.xxx.xx.xxx:3306').\
option('driver', 'com.mysql.jdbc.Driver').\
option('user', 'xxxxxxxxxxx').\
option('password', 'xxxxxxxxxxxxxxxxxxxx').\
option('dbtable', 'dbname.tablename').\
load()
df.printSchema()
Снова работает sparksession, но когда я запускаю базу данных чтения, я получаю следующую ошибку:
Py4JJavaError Traceback (most recent call last)
<ipython-input-5-d85d72d23ebe> in <module>
4 option('user', 'xxxxxxx').\
5 option('password', 'xxxxxxxxxxxxx').\
----> 6 option('dbtable', 'dbname.tablename').\
7 load()
8
C:\spark\spark-3.0.0-preview2-bin-hadoop2.7\python\pyspark\sql\readwriter.py in load(self, path, format, schema, **options)
164 return self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(path)))
165 else:
--> 166 return self._df(self._jreader.load())
167
168 @since(1.4)
C:\spark\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\py4j-0.10.8.1-src.zip\py4j\java_gateway.py in __call__(self, *args)
1284 answer = self.gateway_client.send_command(command)
1285 return_value = get_return_value(
-> 1286 answer, self.gateway_client, self.target_id, self.name)
1287
1288 for temp_arg in temp_args:
C:\spark\spark-3.0.0-preview2-bin-hadoop2.7\python\pyspark\sql\utils.py in deco(*a, **kw)
96 def deco(*a, **kw):
97 try:
---> 98 return f(*a, **kw)
99 except py4j.protocol.Py4JJavaError as e:
100 converted = convert_exception(e.java_exception)
C:\spark\spark-3.0.0-preview2-bin-hadoop2.7\python\lib\py4j-0.10.8.1-src.zip\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
326 raise Py4JJavaError(
327 "An error occurred while calling {0}{1}{2}.\n".
--> 328 format(target_id, ".", name), value)
329 else:
330 raise Py4JError(
Py4JJavaError: An error occurred while calling o87.load.
: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'dbname.tablename WHERE 1=0' at line 1
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:61)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:226)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:339)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:240)
at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:229)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:229)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:179)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.base/java.lang.Thread.run(Thread.java:835)
У меня есть проверка MySQLSyntaxErrorException: Вы ошибка в вашем SQL синтаксисе , но все в порядке, я попытался запустить данные непосредственно в Myworkbench и работает отлично ...
Я использую spark spark-3.0.0-preview2- bin-hadoop2.7 и MySQL MySQL Server 8.0 Я работаю над ноутбуком Jupyter.
Кто-нибудь знает, как решить эту проблему?
Заранее спасибо!