本文介绍如何在 Spark 中利用单例对象高效地加载规则数据,并详细阐述了将这些数据导入 MySQL 数据库的过程,是大数据处理与存储的一个实践示例。
摘要由CSDN通过智能技术生成
因为广播变量一旦广播出去,不能再修改
所以使用单例对象加载规则数据,达到可以更新的目的
bject IpRulesLoader {
//使用IO流读取数据,然后放到ArrayBuffer中
//在object中定义的数据是静态的,在一个JVM中只有一份
val ipRules = new ArrayBuffer[(Long, Long, String, String)]()
//加载Ip规则数据在,在Executor的类加载器中只执行一次
//静态代码块
//读取HDFS中的数据
/*val fileSystem: FileSystem = FileSystem.get(URI.create("file://"), new Configuration())
val inputStreame = fileSystem.open(new Path("D://data/ip/ip.txt"))*/
//读取本地ip规则数据
val bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream("D://data/ip/ip.txt")))
var line: String = null
do{
line = bufferReader.readLine()
if(line !=null){
//处理规则数据
val fields: Array[String] = line.split("[|]")
val startNum: Long = fields(2).toLong
val endtNum: Long = fields(3).toLong
val province: String = fields(6)