目录
前言:
今天在敲spark Scala 的代码遇到了一些问题,分享给大家,希望也能解决到你们的问题
环境:
IntelliJ IDEA 2023.2.2
jdk 1.8
scala 2.11.12
scala sdk 2.11.6
工具介绍:
Scala:
Scala 是 Scalable Language 的简写,是一门多范式的编程语言,也是一种函数式语言,其函数也能当成值来使用,Scala目前最新大版本是2.13,考虑后续与Spark的兼容性和稳定性等问题,实际安装2.11或2.12更为合适。Scala语言是Java补充并且比Java更加的简洁,Java的很多机制都是向Scala借鉴的,在未来越来越多Java开发者会拥抱Scala,Java和Scala混合编程开发会是Java开发者的最佳选择。
Spark:
Spark是一种快速、通用、可扩展的大数据分析引擎,它是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。它有助于在Hadoop集群中运行应用程序,内存速度最高可提高100倍,而在磁盘上运行时则可提高10倍。这可以通过减少对磁盘的读/写操作次数来实现。提供Java,Scala或Python内置的API。还支持SQL查询,流数据,机器学习(ML)和图算法。
遇到的问题:
问题一:
scala Generated source files should not be edited. The changes will be lost when sources are regenerated. (不应编辑生成的源文件。在重新生成源时,更改将丢失)
对此:网上有不同的想法https://www.dvy.com.cn/2022/06/03/7672.html,但是我用不了,现,解决一下我的方法。
首先 : 重新下一个sdk,要 2.11.xx 的,已经 有的跳过
然后: 重新开一个项目,就可以解决了。
原因: idea卡了
试一下
object text{
def main(args: Array[String]): Unit = {
var x = ""
var i = 0
for (i <- 1 to 10){
x += i
}
println(x)
}
}
结果:
没有问题, 就算是,真的在运行中改代码也没有问题
问题二:
idea无法创建Scala类的问题
idea无法新建scala类解决办法_idea无法创建scala类-CSDN博客
这个问题:我跟绝上面的博客直接电脑重启就解决了
一些spark在Scala中的代码实现:
具体的数据信息请看火柴人数据分析-CSDN博客
一、计算前一天, 血量低于20, 不同阵营 。的数据数量
object task5{
def main(args: Array[String]): Unit = {
var ss = SparkSession.builder().master("local").appName("task5")
.config("spark.driver.host", "localhost")
.getOrCreate()
var df = ss.read.json("E:\\spark\\can_data\\*")
// 获取当前日期
var date = new LocalDate()
// 获取前一天日期
var date1 = date.minusDays(1).toString()
// 获取前一天的数据
var df1 = df.filter(x => x.get(1).toString.split(" ").apply(0) == date1)
// 获取血量低于20的数据
var df2 = df1.filter(l => fun(Integer.valueOf(l.get(0).toString)))
// 分组求数量
var df3 = df2.groupBy("occupation").count()
df3.show()
}
def fun(x: Integer): Boolean = {
return x < 20;
}
}
结果如下
二、统计不同阵营获得金元宝的数量
object task4{
def main(args: Array[String]): Unit = {
var ss = SparkSession.builder().master("local").appName("task4")
.config("spark.driver.host", "localhost")
.getOrCreate()
var df = ss.read.json("E:\\spark\\can_data\\2023-11-17")
// 通过 occupation 分组统计得知 哪一个职业的受益比较高
var cnt = df.groupBy("occupation").sum("money")
cnt.show()
}
}
结果如下:
三、统计各个阵营胜负的人数
object task3{
def main(args: Array[String]): Unit = {
var ss = SparkSession.builder().master("local").appName("task")
.config("spark.driver.host", "localhost")
.getOrCreate()
var df = ss.read.json("E:\\spark\\can_data\\2023-11-17")
// 同时根据 "department" 和 "win" 分组
var cou = df.groupBy("department", "win").count()
df.show()
}
}
结果如下
感想:
某位名人曾经说过,代码界遇到的问题80%都可以通过重启解决,剩下的20%不用解决,这世界本来就不是完美的。对此,我只能承认前半句,因为,代码逻辑性太强了,一个地方出bug其他地方也会停止,所以后面的20%就是我们真正需要解决的问题,csdn就是解决这些问题的对吧。
小组后续补充:
https://blog.csdn.net/really_good_girl/article/details/134538739