3. 添加日志配置信息
执行过程中,会产生大量的执行日志,如果为了能够更好的查看程序的执行结果,可以在项
目的resources 目录中创建log4j.properties 文件,并添加日志配置信息:
配置信息:
log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd
HH:mm:ss} %p %c{1}: %m%n
Set the default spark-shell log level to ERROR. When running the spark-shell,
the
log level for this class is used to overwrite the root logger’s log level, so
that
the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=ERROR
Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=ERROR
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR
SPARK-9183: Settings to avoid annoying messages when looking up nonexistent
UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
注意:两个红框的地方都要有log4j.properties 文件(只需要在resources下创建就可以了,target目录下是自动生成的,如果没有生成,直接复制一份粘贴过去)
1. 代码示例
package wc
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark01_WordCount {
def main(args: Array[String]): Unit = {
//application
//Spark框架:是一个环境
//TODO 建立和spark的连接
//JDBC:Connection
val sparkConf = new SparkConf().setMaster(“local”).setAppName(“WordCount”)
val sc = new SparkContext(sparkConf)
//TODO 执行业务操作
//1.读取文件,获取一行一行的数据
var lines: RDD[String] = sc.textFile(“datas”)
//2.一行数据进行拆分,形成一个一个的单词(分词):扁平化
var words: RDD[String] = lines.flatMap(_.split(" "))
//3.将数据根据分词进行分组,便于统计
var wordGroup: RDD[(String, Iterable[String])] = words.groupBy(word => word)
//4.对分组后的数据进行转换(统计)
val wordToCount = wordGroup.map{
case (word, list) => {
(word, list.size)
}
}
//5.将转换结果采集到控制台打印出来
var varry: Array[(String, Int)] = wordToCount.collect()
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!