SparkSql清洗Hive中数据并存入Mysql

一、准备数据


因为数据目前在本地,所以先将数据上传至Hive,再进行清洗。
上传步骤:
1、将数据上传至虚拟机中:使用rz -E 选择文件
2、进入hive,选择数据库,并进行建表
注意:建表的时候,要保证表的分隔符要和数据本身的分隔符相同,否则导入数据的时候会出现所有数据都插入到同一列。

create table data(
TRIP_ID string,CALL_TYPE string,
ORIGIN_CALL string,ORIGIN_STAND string,
TAXI_ID string,TIME_STAMP string,
DAY_TYPE string,MISSING_DATA string,POLYLINE array<string>)
row format delimited fields terminated by '\t';

3、将刚刚上传的数据导入创建的表中

load  data local inpath '/data/data.txt' into table data;

4、导入成功之后,可以查询验证一下数据是否完整。

select * from data;

在这里插入图片描述

二、编写Spark代码

package 数据清洗

import org.apache.spark.sql.SparkSession
import org.apache.spark.{SparkConf, SparkContext}

import java.util.Properties
//TODO 此代码是最基本的提取Hive数仓的数据清洗之后并存入Mysql步骤
object Q1_test {
  def main(args: Array[String]): Unit = {
    //TODO 配置SparkSql参数
    val sparkConf=new SparkConf().setAppName("name").setMaster("local[*]")
    val sc=new SparkContext(sparkConf)
    val spark=SparkSession.builder().config("hive.metastore.uris","thrift://192.168.38.144:9083")
    .config(sparkConf).enableHiveSupport().getOrCreate()
//    spark.sql("use ssm")
    //TODO 提取数据
    val sourcedata=spark.sql("select time_stamp from test.data") 
    //test.data 表示test为数据库的名字,data为表名
    
    sourcedata.createTempView("timestamp")
    //使用HQL语句清洗数据
    val result=spark.sql("select from_unixtime(regexp_extract(time_stamp,'([0-9]+)',0))as times from timestamp order by times desc limit 10")

    //TODO 配置Mysql并写入
    val prop=new Properties()
    prop.put("user","root")
    prop.put("password","123456")
    val url="jdbc:mysql://192.168.38.160:3306/test"
    result.write.mode("overwrite").jdbc(url,"result2",prop)
    spark.stop()
  }
}

代码运行成功之后就可以进入mysql查询数据了!

在这里插入图片描述

注意事项:

Spark连接Hive之前,需要执行提前打开hiveserver的端口:
在虚拟机输入命令:hive --service metastore
此命令为堵塞进程,打开之后复制会话窗口执行后续操作。
在这里插入图片描述

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SparkSQL是Apache Spark的一个模块,用于对大规模数据进行高性能处理和查询。Hive是一个数据仓库基础设施工具,提供了类似于SQL的查询语言,可以从数据仓库提取和分析数据。Elasticsearch是一个基于分布式搜索和分析引擎的开源工具,可以进行实时数据搜索、分析和可视化。 要将Hive数据查询结果存入Elasticsearch,首先需要创建一个SparkSession对象,并配置相应的Elasticsearch连接信息。然后,可以使用SparkSQL查询Hive数据,并将结果转换为DataFrame。接下来,需要使用Elasticsearch-Hadoop库将DataFrame数据写入Elasticsearch。 具体步骤如下: 1. 创建SparkSession对象: ```scala val spark = SparkSession.builder() .appName("Hive to Elasticsearch") .config("spark.sql.warehouse.dir", "/user/hive/warehouse") .enableHiveSupport() .getOrCreate() ``` 其,`/user/hive/warehouse`是Hive默认的数据库路径。 2. 查询Hive数据: ```scala val data = spark.sql("SELECT * FROM table_name") // 通过SQL查询Hive数据 ``` 这里的`table_name`是要查询的Hive表名,可以根据需要修改为实际表名。 3. 将查询结果转换为DataFrame: ```scala val df = data.toDF() ``` 可以根据需要对DataFrame进行进一步的处理和转换。 4. 配置Elasticsearch连接信息: ```scala df.write .format("org.elasticsearch.spark.sql") .option("es.nodes", "localhost") .option("es.port", "9200") .option("es.resource", "index_name/document_type") .save() ``` 这里的`localhost`和`9200`分别是Elasticsearch的主机和端口。`index_name`是要写入的Elasticsearch索引名称,`document_type`是要写入的文档类型。 5. 提交作业并等待执行结果: ```scala spark.stop() // 关闭SparkSession对象 ``` 这一步是为了确保作业提交成功并完成。 通过以上步骤,就可以将Hive查询结果存入Elasticsearch了。需要注意的是,为了能够使用Elasticsearch-Hadoop库,还需要在构建SparkSession对象时添加相应的依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值