当前位置: 首页 > article >正文

SparkSQL读取本地文件写入MySQL

unit1:LoggerLevel

思路在main代码中,读取的文件要注意格式。

package com.units

import org.apache.log4j.{Level, Logger}

trait LoggerLevel {
  Logger.getLogger("org").setLevel(Level.ERROR)
}

unit2:getLocalSparkSession

package com.units

import org.apache.spark.sql.SparkSession

object SparkUnit {

  /**
   * 一个class参数
   **/
  def getLocalSparkSession(appName: String): SparkSession = {
    SparkSession.builder().appName(appName).master("local[*]").getOrCreate()
  }

  def getLocalSparkSession(appName: String, support: Boolean): SparkSession = {
    if (support) SparkSession.builder().master("loca[*]").appName(appName).enableHiveSupport().getOrCreate()
    else getLocalSparkSession(appName)
  }

  def getLocalSparkSession(appName: String, master: String): SparkSession = {
    SparkSession.builder().appName(appName).master(master).getOrCreate()
  }

  def getLocalSparkSession(appName: String, master: String, support: Boolean): SparkSession = {
    if (support) SparkSession.builder().appName(appName).master(master).enableHiveSupport().getOrCreate()
    else getLocalSparkSession(appName, master)
  }

  def stopSpark(ss: SparkSession) = {
    if (ss != null) {
      ss.stop()
    }
  }
}

main:Demo09_SparkSQL_MySQL

package com.example

import java.util.Properties

import com.units.{LoggerLevel, SparkUnit}

object Demo09_SparkSQL_MySQL extends LoggerLevel {
  def main(args: Array[String]): Unit = {
    /**
     * 读取两个数据,写入MySQL
     *
     * 实现:
     *   1. 读取两个文件
     *   2. 转为table操作对象
     *   3. 写SQL查询
     *   4. 保存查询SQL的对象
     **/

    val ss = SparkUnit.getLocalSparkSession("Demo09")

    // 读取两个文件
    val path = "F:\\下载\\哔哩哔哩下载\\dataset\\"
    val student_class = ss.read.csv(path + "student_class.csv").toDF("id", "name", "class")
    val student_info = ss.read.csv(path + "student_info.csv").toDF("id", "name", "gender", "age")

    // SQL式编程需要转为table结构
    student_class.createTempView("student_class")
    student_info.createTempView("student_info")

    // select
    val student = ss.sql(
      """
        | SELECT a.`id`,a.`name`,a.`class`,b.`gender`,b.`age`
        | FROM `student_class` a,`student_info` b
        | WHERE a.`id` = b.`id`
        |""".stripMargin)

    // JDBC
    val url = "jdbc:mysql://localhost:3306/student_db"
    val tb = "student"
    val properties = new Properties()
    properties.setProperty("user", "root")
    properties.setProperty("password", "1234567")
    properties.setProperty("driverClass", "com.mysql.jdbc.Driver")

    // save
    student.write.mode("ignore").jdbc(url, tb, properties)

    // tips :除了查询SQL返回对象,然后保存对象
    //        还可以直接create table as select ... 一步到位
  }
}

http://www.kler.cn/a/272352.html

相关文章:

  • Mac下安装ADB环境的三种方式
  • 论文阅读笔记:AI+RPA
  • 计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计
  • 将n变为一个可以被表示为2^{a}+2^{b}的正整数m
  • 【线性代数】行列式的概念
  • ORB-SLAM2源码学习:ORBmatcher.cc⑥: int ORBmatcher::Fuse将地图点投影到关键帧中进行匹配和融合
  • 【MySQL】MySQL事务
  • SpringCloudAlibaba系列之Seata实战
  • RuiYi-Vue开源项目1-下载并实现运行RuiYi-Vue项目
  • 华为云APIG跨域资源共享方案
  • RAID技术知识详解到RAID 10的linux实现过程
  • 自动部署SSL证书到阿里云腾讯云CDN
  • C到C++的敲门砖-1
  • 进入docker容器中安装软件失败解,国外源慢,时间不同步,执行命令权限不够等问题解决办法
  • 支付监控3合1工具2029版,支持自定义广告
  • npm run dev命令的执行顺序和原理
  • HTML、CSS和JavaScript在Web开发中的作用
  • Autosar Crypto Driver学习笔记(二)
  • 【excel】常用的50个函数与基础操作(统计函数)
  • 【Java基础知识总结 | 第三篇】深入理解分析ArrayList源码
  • Flask中的Blueprints:模块化和组织大型Web应用【第142篇—Web应用】
  • 离线LaTex公式识别V1.0开发
  • C#,人工智能,机器学习,聚类算法,训练数据集生成算法、软件与源代码
  • 微软 CEO Satya Nadella 的访谈
  • Gitlab光速发起Merge Request
  • 每日学习笔记:C++ STL 的forward_list