pyspark mysql jdbc load调用o23.load时发生错误没有合适的驱动程序

我在我的Mac上使用docker image sequenceiq / spark来研究这些火花示例 ,在学习过程中,根据这个答案将图像内的火花升级到1.6.1,并且在启动Simple Data Operations示例时发生错误,这是发生了什么事情:

当我运行df = sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load()会引发一个错误, pyspark控制台如下:

 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. 16/04/12 22:45:28 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 1.6.1 /_/ Using Python version 2.6.6 (r266:84292, Jul 23 2015 15:22:56) SparkContext available as sc, HiveContext available as sqlContext. >>> url = "jdbc:mysql://localhost:3306/test?user=root;password=myPassWord" >>> df = sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load() 16/04/12 22:46:05 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies) 16/04/12 22:46:06 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies) 16/04/12 22:46:11 WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0 16/04/12 22:46:11 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException 16/04/12 22:46:16 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies) 16/04/12 22:46:17 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/spark/python/pyspark/sql/readwriter.py", line 139, in load return self._df(self._jreader.load()) File "/usr/local/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__ File "/usr/local/spark/python/pyspark/sql/utils.py", line 45, in deco return f(*a, **kw) File "/usr/local/spark/python/lib/py4j-0.9-src.zip/py4j/protocol.py", line 308, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o23.load. : java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:278) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:50) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:50) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:49) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:120) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:91) at org.apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:57) at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:158) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:119) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381) at py4j.Gateway.invoke(Gateway.java:259) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:209) at java.lang.Thread.run(Thread.java:744) >>> 

这是我迄今为止所尝试的:

  1. 下载mysql-connector-java-5.0.8-bin.jar ,并把它放到/usr/local/spark/lib/ 。 它仍然是一样的错误。

  2. 像这样创buildt.py

    从pyspark导入SparkContext
    从pyspark.sql导入SQLContext

    sc = SparkContext(appName =“PythonSQL”)
    sqlContext = SQLContext(sc)
    df = sqlContext.read.format(“jdbc”)。option(“url”,url).option(“dbtable”,“people”)。load()

    df.printSchema()
    countsByAge = df.groupBy(“age”)。count()
    countsByAge.show()
    countsByAge.write.format( “JSON”).save( “文件:///usr/local/mysql/mysql-connector-java-5.0.8/db.json”)

然后,我试着spark-submit --conf spark.executor.extraClassPath=mysql-connector-java-5.0.8-bin.jar --driver-class-path mysql-connector-java-5.0.8-bin.jar --jars mysql-connector-java-5.0.8-bin.jar --master local[4] t.py 结果仍然是一样的。

  1. 然后我试了pyspark --conf spark.executor.extraClassPath=mysql-connector-java-5.0.8-bin.jar --driver-class-path mysql-connector-java-5.0.8-bin.jar --jars mysql-connector-java-5.0.8-bin.jar --master local[4] t.py ,有和没有下面的t.py ,仍然是一样的。

在所有这一切,MySQL正在运行。 这里是我的信息:

 # rpm --query centos-release centos-release-6-5.el6.centos.11.2.x86_64 

而hadoop版本是2.6。

现在我不下去哪里,所以希望有人能帮忙给点build议,谢谢!

当我试图让我的脚本写入MySQL时,我遇到了“java.sql.SQLException:没有合适的驱动程序”。

这是我做了什么来解决这个问题。

在script.py中

 df.write.jdbc(url="jdbc:mysql://localhost:3333/my_database" "?user=my_user&password=my_password", table="my_table", mode="append", properties={"driver": 'com.mysql.jdbc.Driver'}) 

然后我跑火花 – 这样提交

 SPARK_HOME=/usr/local/Cellar/apache-spark/1.6.1/libexec spark-submit --packages mysql:mysql-connector-java:5.1.39 ./script.py 

请注意,SPARK_HOME特定于安装火花的位置。 对于你的环境, https://github.com/sequenceiq/docker-spark/blob/master/README.md可能会有所帮助&#x3002;

万一上述情况令人困惑,试试这个:
在t.py中replace

 sqlContext.read.format("jdbc").option("url",url).option("dbtable","people").load() 

 sqlContext.read.format("jdbc").option("dbtable","people").option("driver", 'com.mysql.jdbc.Driver').load() 

和运行

 spark-submit --packages mysql:mysql-connector-java:5.1.39 --master local[4] t.py