• 使用Spark SQL读取数据库


    1、首先需要安装MySQL,使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本:
    sudo apt-get update #更新软件源
    sudo apt-get install mysql-server #安装mysql

    2、可以用如下命令启动、关闭、重启mysql服务器
    service mysql start
    service mysql stop
    service mysql restart

    3、 用启动命令启动MySQL,确认是否启动成功,mysql节点处于LISTEN状态表示启动成功
    sudo netstat -tap | grep mysql

    这里可能会提示:找不到命令

    可以执行如下命令安装:
    sudo apt-get install net-tools

    然后再运行最上面命令(sudo netstat -tap | grep mysql)即可正常执行:

    4、 设置mysql无密码登录以及解决利用sqoop导入MySQL中文乱码的问题(可以插入中文,但不能用sqoop导入中文)
    执行如下命令:
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    在[mysqld]下添加如下两行信息,如下图
    skip-grant-tables
    character_set_server=utf8

    修改完成后保存退出
    在终端中执行如下命令重启mysql服务:
    service mysql restart
    5、 进入mysql shell界面
    mysql -u root -p
    这里遇到输入密码不用输入直接回车

    然后就进入到MySQL shell界面了

    6、 然后先修改root密码,依次输入如下两条语句:
    flush privileges;

    ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
    这里我将密码设置为了123456,方便后续起见,建议大家也如此设置。

    7、 修改完之后按ctrl+D退出mysql,然后执行如下命令:
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

    将刚才增加的第一行注释掉或删除都可,然后保存退出

    8、 然后输入命令 service mysql restart 重启MySQL;
    重启完成后输入命令 mysql -u root -p
    这里需要输入刚才设置的密码(123456),然后回车进入

    9、 在mysql shell界面输入如下语句,查看mysql当前设置的编码,和下图一致即正常
    show variables like “char%”;

    10、在mysql shell中输入以下SQL语句完成数据库和表的创建
    create database spark;
    use spark;
    create table student (id int(4), name char(20), gender char(4), age int(4));
    insert into student values(1,‘Xueqian’,‘F’,23);
    insert into student values(2,‘Weiliang’,‘M’,24);
    select * from student;

    以上语句创建了一个名为spark的数据库,并在该数据库中创建了一个student表,向表里插入了两条记录

    11、下载安装MySQL的JDBC驱动程序,这里已将压缩包放到群文件里,请自行下载,并将该压缩包解压到主目录下

    12、 然后将解压出来的文件中的jar包放到spark的安装目录” /usr/local/spark/jars”下

    13、 Ctrl+D退出刚才的mysql界面,然后在终端中输入如下两条命令启动pyspark:
    cd /usr/local/spark

    ./bin/pyspark

    14、 然后在pyspark中输入如下,输入完确认无误后回车:
    jdbcDF=spark.read.format(“jdbc”).option(“driver”,“com.mysql.jdbc.Driver”).option(“url”,“jdbc:mysql://localhost:3306/spark”).option(“dbtable”,“student”).option(“user”,“root”).option(“password”,“123456”).load()

    15、 然后再输入,输入完后回车:
    jdbcDF.show()
    可以看到显示了刚才创建的student表,说明连接数据库成功

    16、 然后按ctrl+D回到终端,输入如下命令创建一个代码文件InsertStudent.py,向spark.student表中插入两条新记录
    cd ~
    vim InsertStudent.py

    17、 输入如下代码
    #!/usr/bin/env python3
    from pyspark.sql import Row
    from pyspark.sql.types import *
    from pyspark import SparkContext,SparkConf
    from pyspark.sql import SparkSession
    spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()

    #下面设置模式信息
    schema = StructType([StructField(“id”, IntegerType(), True),
    StructField(“name”, StringType(), True),
    StructField(“gender”, StringType(), True),
    StructField(“age”, IntegerType(), True)])

    #下面设置两条数据,表示两个学生的信息
    studentRDD = spark
    .sparkContext
    .parallelize([“3 Rongcheng M 26”,“4 Guanhua M 27”])
    .map(lambda x:x.split(" "))

    #下面创建Row对象,每个Row对象都是rowRDD中的一行
    rowRDD = studentRDD.map(lambda p:Row(int(p[0].strip()), p[1].strip(), p[2].strip(), int(p[3].strip())))

    #建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来
    studentDF = spark.createDataFrame(rowRDD, schema)

    #写入数据库
    prop = {}
    prop[‘user’] = ‘root’
    prop[‘password’] = ‘123456’
    prop[‘driver’] = “com.mysql.jdbc.Driver”
    studentDF.write.jdbc(“jdbc:mysql://localhost:3306/spark”,‘student’,‘append’, prop)

    18、 保存并退出后输入如下命令运行该程序:
    python3 ~/InsertStudent.py

    19、 运行完毕后,输入如下命令进入mysql中查看是否插入数据
    mysql -u root -p

    20、 进入MySQL后输入如下两条语句:
    use spark;
    select * from student;

    可以看到已经新插入了两条记录

  • 相关阅读:
    大学生餐饮主题网页制作 美食网页设计模板 学生静态网页作业成品 dreamweaver美食甜品蛋糕HTML网站制作
    Android recycleview瀑布流中间穿插一行占满一屏
    【Day19】接口
    计算机组成原理---第七章输入/输出系统---I/O方式
    Java单元测试 - mock静态方法
    Java基于微信小程序的电影交流平台
    舞蹈室如何打破拉新难的困境?
    vscode因为大文件而无限崩溃的问题,窗口意外终止(原因:“oom“,代码:“-536870904“
    理解Spring原理 - 手写IOC和DI
    react-router@6 版本初体验
  • 原文地址:https://blog.csdn.net/qq_41358574/article/details/128165119