pyspark调mysql报错:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

问题描述

在做http://dblab.xmu.edu.cn/blog/2335/实验时,做到最后一部分代码的第20行时如下图。

执行报错。具体错误信息为:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

分析

pyspark通过调用mysql-connector-java-5.1.47.jar包去连接mysql,报错信息是未找到包,只需要让spark识别到mysql 的jar包就可以了。

解决方法

1. 把jar包放入 spark目录下/jars/

无效

2. 调用第三方python库:findspark 链接:https://github.com/minrk/findspark

无效

3. 修改python调用spark的部分

import os
from pyspark import SparkConf, SparkContext

SUBMIT_ARGS = "--packages mysql:mysql-connector-java:5.1.39 pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
conf = SparkConf()
sc = SparkContext(conf=conf)

无效

4. 最后解决方法

  1. 复制mysql connect的jar包到 spark目录下/jars/
cp mysql的jar包路径 spark目录下/jars/
# 根据自己的目录调整


2. 切换到安装spark的目录

  1. 执行以下命令
./bin/pyspark --jars 第一步保存的jar包路径 --driver-class-path 第一步保存的jar包路径
# 例如: ./bin/pyspark --jars /usr/local/spark/jars/mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar --driver-class-path /usr/local/spark/jars/mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar

弊端: 只能单次使用,下次关闭spark的进程就没有了。最好的办法就是让spark识别到的包,一劳永逸。但是,我尝试了各种方法都不行。

解释: 自己指定jar包的位置让spark去加载,执行后进入spark的shell中,spark就加载了jar包.

成功截图

总结:目前解决的方法还是很麻烦,等以后找到好的方法再更新。

posted @ 2020-07-25 14:41  Adam_lxd  阅读(1233)  评论(0编辑  收藏  举报