spark core/spark sql scala样例代码

该博客展示了使用Spark Core和Spark SQL在Scala中处理日志数据的实例。通过过滤和聚合,统计了上网时间超过1小时的女性用户信息。首先,利用SparkConf和SparkContext创建环境,然后读取数据,筛选女性用户,计算总上网时间。接着,通过Spark SQL创建case class和DataFrame,执行SQL查询以获取上网时间超过2小时的女性用户数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志数据:第一个字段为姓名,第二个字段为性别,第三个字段为上网时间

ZhangSan,male,20

Lisi,female,80

WangWu,female,60

WangMing,female,70

ZhangHua,male,50

LiHong,female,60

YinHui,male,50

LiMing,female,90

ZhuLucy,female,60


spark core scala样例

目的:统计上网时间大于1小时的男性网民信息并输出

//配置Spark应用名称
val conf = new SparkConf().setAppName("FemaleInfoCollection");
//初始化Spark Context
val sc = new SparkContext(conf)
//构建RDD,其是传入参数args(0)的指定路径
val textRDD = sc.textFile(args(0))
//筛选出female相关信息
val textFemaleRDD = textRDD.filter(_.contains("female"))
//汇总每个female上网时间
val femaleOnlineRDD:RDD[(String,Int)]=textFemaleRDD.map{line => val t = line.split(",")
(t(0),t(2).toInt)
}.reduceByKey(_+_)
//筛选出时间大于2小时的female信息并输出
val result = femaleOnlineRDD.filter{line => line._2 > 120}
result.foreach(println)


sparkSQL样例

目的:筛选出上网时间超过2小时的女性网民信息,并输出
//定义表结构,后面用来将文本数据映射为dataFrame---------Q:case class什么含义?
case class femaleInfo(Name: String, Gender: String, StayTime: Int)
//定义函数------------Q:参数args: Array[String]的含义,如何应用?
def main(args: Arry[String]){
//配置spark应用名称
val sparkConf = new SparkConf().setAppName("Female info")
//初始化spark context
val sc = new SparkContext(sparkConf)
//初始化spark sql context
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
//隐式转换 Q:import操作只是导入包还是执行操作?
import sqlContext.implicits._
//构建RDD
val RDD = sc.textFile(args(0))
//将构建的RDD每行数据按照“,”切分
val mapRDD = RDD.map(_.splits(","))
//通过隐式转换将RDD转换为DataFrames,然后注册表
val dataFrame = mapRDD.map(p => femaleInfo(p(0), p(1), p(2).trim.ToInt).toDF.registerTempTable(FemaleInfoTable)
//通过SQL筛选女性上网时间数据,对相同名字进行聚合
val femaleTimeInfo = sqlContext.sql("select name,sum(stayTime) as stayTime from FemaleInfoTable where gender = 'female' group by name")
//筛选出时间大于2个小时的女性网民信息,并输出
val result = femaleTimeInfo.filter("stayTime >= 120").collect().foreach(println)
sc.stop() }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值