当前位置: 首页 > 面试题库 >

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

乌翔
2023-03-14
问题内容

我在Mac上使用docker image sequenceiq /
spark
研究了这些spark示例,在学习过程中,根据此答案,将映像中的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. t.py像这样创建:

    from pyspark import SparkContext
    

    from pyspark.sql import 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(“file:///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。

现在我不打算下一步去了,所以我希望有人可以提供一些建议,谢谢!


问题答案:

当我尝试将脚本写入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特定于spark的安装位置。对于您的环境,https://github.com/sequenceiq/docker-
spark/blob/master/README.md
可能会有所帮助。

如果以上所有内容都令人困惑,请尝试以下操作:
在t.py中替换

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


 类似资料:
  • 我正在尝试运行Selenium测试。我正在使用C#。我试过的每个司机都有问题。 看起来像是chromedriver。已找到exe,但它可以找到Chrome二进制文件。我设置了通往chrome的路径。自动搜索失败后显式执行。我甚至在最后用“chrome.exe”试过了。我总是得到同样的结果: 在以下位置找不到Chrome二进制文件: C:\用户\Vilem\AppData\本地\谷歌\Chrome\

  • 我从使用netbean的基本java derby DB程序中得到以下错误。 我试过下载包含jar文件的多种类型的驱动程序,然后更改

  • 我正在使用JDBC接收器连接器尝试Kafka和Postgres接收器。 例外: 水槽特性: 我已经设置了< code > plugin . path =/usr/share/Java/Kafka-connect-JDBC /usr/share/java/kafka-connect-jdbc我有以下文件: , , 和其他一些基本上与汇合物一起打包的罐子。 然后我下载了 postgres-jdbc 驱

  • 当我创建kafka jdbc源连接器(debezium连接器用于带有confluent-5.4.0的oracle)时,出现错误“没有找到适合jdbc: oracle: oci…”。 我的oracle版本是企业版发布11.2.0.4.0-64位生产,我尝试了不同的驱动程序jar,但得到了相同的异常。 我的jdk版本是: 我已经将 debezium-连接器-预言机添加到文件夹融合-5.4.0/shar

  • 我创建了一个maven项目。 我正在尝试将MSSQL(Microsoft SQL Server 2014)与我的J2EE应用程序连接起来。但它引发了以下异常 我的代码: 网状物xml 登记 数据库连接 上下文xml

  • 试图连接到允许远程连接的免费mysql数据库主机,但我遇到了以下错误: 未找到适合jdbc的驱动程序:mysql://xx2-23-x1-2x1-172.compuxe-1.xmazonaws.com:3306 我使用下面的代码。 编辑 Stack Trace显示在下面: