电影推荐系统-[数据库+搜索服务器部分]-写代码(二)Scala代码实现(1)【Spark SQL--加载数据】
Posted on 2020-09-15 16:08 MissRong 阅读(215) 评论(0) 收藏 举报写代码(二)Scala代码实现(1)【Spark SQL--加载数据】
1)Spark SQL--加载数据
(1)DataLoader类:
package test
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
/**
* @Author : ASUS and xinrong
* @Version : 2020/9/4
*
* Spark SQL--初始化数据
*/
object DataLoader {
def main(args: Array[String]): Unit = {
//封装各个文件路径
val DATAFILE_MOVIES="D:\\tmp_files\\reco_data\\small\\movies.csv"
val DATAFILE_RATINGS="D:\\tmp_files\\reco_data\\small\\ratings.csv"
val DATAFILE_TAGS="D:\\tmp_files\\reco_data\\small\\tags.csv"
//一、声明Spark环境
//1.config--对"local"做一层封装:
val params=scala.collection.mutable.Map[String,Any]()
params+="spark.cores"->"local"
val config= new SparkConf().setAppName("DataLoader").setMaster(params("spark.cores").asInstanceOf[String]);
//2.SparkSession
val spark=SparkSession.builder().config(config).getOrCreate()
//二、加载数据集
//1.声明各个数据所在路径(单独拿出来的原因:生产和测试时的路径通常不同,将各个文件的路径放在一起便于修改)
val movieRDD=spark.sparkContext.textFile(DATAFILE_MOVIES)
val ratingRDD=spark.sparkContext.textFile(DATAFILE_RATINGS)
val tagRDD=spark.sparkContext.textFile(DATAFILE_TAGS)
//2.将RDD转换成DataFrame--使用SparkSQL比较好的特性(读入/写出数据的时候很方便)
//知识点参考:https://www.cnblogs.com/liuxinrong/articles/13393309.html
// https://www.cnblogs.com/liuxinrong/articles/13332014.html
//1)import 导入隐式转换
import spark.sqlContext.implicits._
//2)关联数据和Schema
val movieOF=movieRDD.map(
line=>{
//用"\^"分割行数据
val x=line.split("\\^")
//2)定义Schema--通过case class方式(trim是将前后的空格去掉)
Movie(x(0).trim.toInt,x(1).trim,x(2).trim,
x(3).trim,x(4).trim, x(5).trim,x(6).trim,x(7).trim,x(8).trim,x(9).trim)
}
).toDF() //3)RDD转换成DF
val ratingOF=ratingRDD.map(
line=>{
val x=line.split(",")
Rating(x(0).trim.toInt,x(1).trim.toInt,x(2).trim.toDouble,x(3).trim.toInt)
}
).toDF()
val tagOF=tagRDD.map(
line=>{
val x=line.split(",")
Tag(x(0).trim.toInt,x(1).trim.toInt,x(2).trim,x(3).trim.toInt)
}
).toDF()
// movieOF.show() //默认最多展示20行数据
// ratingOF.show(2) //只展示2行结果数据
tagOF.show()
}
}
(2)自定义数据类-Model
package test
/**
* @Author : ASUS and xinrong
* @Version : 2020/9/4
* 数据格式转换类
* ---------------电影表------------------------
* 1
* Toy Story (1995)
*
* 81 minutes
* March 20, 2001
* 1995
* English
* Adventure|Animation|Children|Comedy|Fantasy
* Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn
* John Lasseter
*/
case class Movie(val mid:Int,val name:String,val descri:String,
val timelong:String,val cal_issue:String,val shoot:String,
val language:String,val genres :String,val actors:String,val directors:String)
/**
* -----用户对电影的评分数据集--------
* 1,31,2.5,1260759144
*/
case class Rating(val uid:Int,val mid:Int,val score:Double,val timastamp:Int)
/**
* --------用户对电影的标签数据集--------
* 15,339,sandra 'boring' bullock,1138537770
*/
case class Tag(val uid:Int,val mid:Int,val tag:String,val timestamp:Int)
(3)结果:



浙公网安备 33010602011771号