qq_45866015 2023-04-14 18:23 采纳率: 97.6%
浏览 7
已结题

sparksql读取mysql错误

img


这是想要跑的代码,用sparkSql从MySQL中读取数据

img

img


这是错误,但是hadoop什么的我也配置了,以及pom对应的版本也对的

img

img


就是报错,找不到原因

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-16 01:43
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7788261
    • 除此之外, 这篇博客: sparkSQL sparkSQL读写数据到MySQL中的 sparkSQL写数据部署到集群 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      import java.util.Properties
      
      import org.apache.spark.sql.{DataFrame, SparkSession}
      
      //todo:通过sparksql把结果数据写入到mysql表中
      object hive2MySQL.data2MysqlJar{
        def main(args: Array[String]): Unit = {
          //1、创建SparkSession
          val spark: SparkSession = SparkSession
                                      .builder()
                                      .appName("Data2Mysql") 
                                      .getOrCreate()
            
          //2、读取mysql表中数据
              //2.1 定义url连接
              val url="jdbc:mysql://node03:3306/spark"
              //2.2 定义表名
              val table="sqlTest"
              //2.3 定义属性
              val properties=new Properties()
              properties.setProperty("user","root")
              properties.setProperty("password","111111")
      
          val mysqlDF: DataFrame = spark.read.jdbc(url,table,properties)
      
          //把dataFrame注册成一张表
            mysqlDF.createTempView("sqlTest")
      
          //通过sparkSession调用sql方法
              //把年龄大于30的用户信息保存到mysql表中
          val result: DataFrame = spark.sql("select * from user where age >14")
      
          //保存结果数据到mysql表中
          //mode:指定数据的插入模式
              //overwrite: 表示覆盖,如果表不存在,事先帮我们创建
              //append   :表示追加, 如果表不存在,事先帮我们创建
              //ignore   :表示忽略,如果表事先存在,就不进行任何操作
              //error    :如果表事先存在就报错(默认选项)
        
           result.write.mode(args(0)).jdbc(url,args(1),properties)
      
          //关闭
           spark.stop()
        }
      }
      

      脚本提交

      spark-submit \
      --master spark://node01:7077 \
      --class hive2MySQL.data2MysqlJar \
      --executor-memory 1g \
      --total-executor-cores 4 \
      --driver-class-path /home/hadoop/jars/mysql-connector-java-5.1.38.jar \
      --jars /home/hadoop/jars/mysql-connector-java-5.1.38.jar \
      original-spark_class05-1.0-SNAPSHOT.jar \
      append  t_person
      
      //original-spark_class05-1.0-SNAPSHOT.jar 自己的Jar包
      
      //注意 关于MySQL驱动jar包以下两种方案二选一即可
      //方案一1 给driver和executor分别指定jar包路径
      --driver-class-path:指定一个Driver端所需要的额外jar          把当前jar包添加到当前程序jar包的class path中
      --jars :指定executor端所需要的额外jar					把当前jar包下发到参与运算的ececutor端的进程中
      
      //方案二
      或者每台服务器都安装MySQL驱动Jar包 并启动
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 创建了问题 4月14日

悬赏问题

  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 为什么我安装了Homebrew之后,无法像官网的那样通过执行命令安装Watchman
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表