SparkSQL+SparkRDD对中国保险汽车安全指数数据测试进行清洗与分析
荣幸终于转入大数据工程师,根据最近正在做的项目,为大家抽取了部分为大家提供参考。寒江孤影,江湖故人啊
Spark SQL是构建在Spark RDD之上的一款ETL(Extract Transformation Load)工具,这类似于构建在MapReduce之上 的1.x版本的Hive。同Spark RDD的不同之处在于Spark SQL的API可以给Spark计算引擎提供更多的信息(计算数据结 构、转换算子),Spark计算引擎可以根据Spark SQL提供的信息优化底层计算任务。目前为止,Spark SQL提供了两
种风格的交互式API:Dataset API/SQL脚本。
数据源: 中国保险汽车安全指数数据
开发环境: IDEA ,maven,scala
数据样本:
数据源分析:
1.汽车价格存在多余信息,需对关键信息进行提取
2.危险系数碰撞得分中出现出现数据为P、M等需要进行ETL处理
开发需求分析:
1.使用SparkSQL对数据源实现ETL操作,技术应用:SparkRDD、SparkSQL、UDF自定义函数
程序开发:
import java.util.Properties
import org.apache.spark.sql.SparkSession
object car_info {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("car_info_analyse").master("local").getOrCreate()
spark.sparkContext.setLogLevel("FATAL")
//创建RDD
val carPairRDD = spark.read.option("header","true").csv("/sparkInfo/car_info.csv")
// carPairRDD.toDF().show(10)
carPairRDD.toDF().createOrReplaceTempView("cars")
//缺失值剔除
//自定义函数处理价格
spark.udf.register("replice_info",(like:String)=>like.replace("该车新车指导价为","").replace("。",""))
//自定义UDF数据清洗操作
spark.udf.register("info_replace",(like:String)=>like.replace("P","较差").replace("M","一般").replace("A","良好").replace("G","优秀"))
val result =spark.sql("select order,brand,factory,car_type,cat_rank,replice_info(price) as price,info_replace(danger_score) as danger_score,info_replace(people_in_safe_score) as people_in_safe_score,info_replace(people_out_safe_score) as people_out_safe_score,info_replace(assist_safe_score) as assist_safe_score from cars where danger_score = '--' or people_in_safe_score ='--' or people_out_safe_score='--' or assist_safe_score='--'")
val prop =new Properties()
prop.setProperty("user","root")
prop.setProperty("password","Password123$")
result.write.jdbc("jdbc:mysql://127.0.0.1:3306/car","car_info",prop)
result.show()
println(result.count())
spark.stop()
}
}
提交到集群或IDEA进行本地测试:
在mysql中查看持久化数据: