spark 通过 scala 读取数据 并且存入 mysql

import java.sql.{Connection,Driver,DriverManager,ResultSet,PreparedStatement}
import org.apache.spark.{SparkConf, SparkContext}

//把每个jsp的访问量,直接保存到Oracle数据中
 // spark-submit --master local --class SaveMySQL SaveSQL.jar
object SaveMySQL {
  def main(args: Array[String]): Unit = {
    //定义SparkContext对象
    val conf = new SparkConf().setAppName("SaveSQL")

    //创建SparkContext对象
    val sc = new SparkContext(conf)

    //读入数据
    //日志:192.168.88.1 - - [30/Jul/2017:12:54:38 +0800] "GET /MyDemoWeb/hadoop.jsp HTTP/1.1" 200 242
    val logData = sc.textFile("/root/log.txt").map(
      line => {
        //解析字符串:找到hadoo.jsp
        //得到: .jsp位置
        val index1 = line.indexOf("\"") //得到的是第一个双引号的位置
        val index2 = line.lastIndexOf("\"") //得到的是最后一个双引号的位置

        //子串:GET /MyDemoWeb/hadoop.jsp HTTP/1.1
        val line1 = line.substring(index1 + 1, index2)
        val index3 = line1.indexOf(" ") //子串中第一个空格
        val index4 = line1.lastIndexOf(" ") //子串中最后一个空格

        //子串
Spark可以从MySQL中提取增量数据存储到Hive中,通常通过以下几个步骤来实现: 1. **连接数据库**:首先,你需要安装Spark SQL库,配置连接到MySQL数据源,可以使用`spark.read.format("jdbc")`来指定JDBC读取方式。 ```scala val df = spark.read.format("jdbc") .option("url", "jdbc:mysql://[mysql_host]:[port]/database_name") .option("dbtable", "[table_name]") .option("user", "[username]") .option("password", "[password]") .load() ``` 记得替换上述代码中的占位符为实际的数据库连接信息。 2. **设置动态分区**:如果你需要获取特定时间范围内的增量数据,可以在SQL查询中使用`PARTITION BY`子句加上时间戳列,如`partitionDate`, 然后只选择大于某个特定值的记录。 ```sql SELECT * FROM table_name WHERE partitionDate > 'your_date_threshold' ``` 3. **创建临时表**:将结果保存到一个新的Spark DataFrame,然后将其转换为Hive的分区表格式,这将自动处理增量加载。 ```scala df.createOrReplaceTempView("temp_table") // 将DataFrame转换为Hive分区表 spark.sql( """ CREATE TABLE IF NOT EXISTS my_hive_table ( ... // 表结构 ) PARTITIONED BY (partitionDate STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE TBLPROPERTIES ('orc.compress'='snappy') AS SELECT * FROM temp_table """ ) ``` 4. **触发写入Hive**:最后,你可以定期运行这个过程,比如每天定时任务,来获取MySQL的新增数据更新Hive表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值