在windows的idea执行spark程序出现异常问题
错误提示:
id not find winutils.exe: {}
java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
解决:
原因是因为缺少一些hadoop支持,需要下载一些资源配置之后才能使用。
下载地址:https://github.com/cdarlint/winutils
1、将下载文件解压到任意目录下
2、选择一个高版本的hadoop,将该版本下的hadoop.dll复制到C:\Window\System32下(这一步最重要,找了很多文章,都没说这个,然后就还是一直不成功)
3、添加环境变量HADOOP_HOME,指向你选择的hadoop目录(你解压的目录)
4、将%HADOOP_HOME%\bin加入到path里面
5、重启 IDE(我的没重启就出问题了,主要是因为环境变量修改了,需要重启启动idea进程读取环境变量)
6、再次运行你的程序就不会在看到这个异常。
引用:https://www.jianshu.com/p/1b82e9af3805
idea中将spark程序打包不成功
错误原因:项目不能在包含有中文的文件夹中创建
RDD调用toDF方法转换为DataFrame报错
1,需要导包:import spark.implicits._
注意:导入包名中的spark要与SparkSession对象名称一致
2,样例类的定义要放在main方法之外
在windows的idea中执行sparksql程序报错
错误信息关键字:
java.lang.NoSuchMethodError:Scala.collection.mutable.Buffer$.empty(),
NoClassDefFoundError:scala/Serializable
解决方案:
访问maven中央仓库:https://mvnrepository.com/ 搜索框输入spark-sql
点击红色框,显示如下图
会发现spark-sql的依赖版本与scala版本的存在对应关系,出错原因就是spark-sql依赖版本与scala版本不对应。我的scala是2.13,因此spark-sql应选择3.3.2,点击3.3.2进入,拷贝依赖到pom文件中
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.13</artifactId>
<version>3.3.2</version>
</dependency>
最后一步,
Edit Configurations ------》Modify options -------》Add dependencies with “Provided” scope -------》Apply------》OK
如下图所示,注意最后一定要 Apply后再OK,不然还是不行。
注意:每创建一个新的object类,在执行main方法之前,都要操作最后一步,否则会报错!
控制日志输出
有时候我们只想看到输出结果,但有大段日志输出干扰了我们的视线。
调用SparkContext对象设置了日志级别也不起作用。
sc.setLogLevel("WARN")
log4j规定了默认的几个级别:trace<debug<info<warn<error<fatal,
如果你设置日志级别是warn,则大于等于这个级别的日志都会输出。
在resources文件夹下,创建log4j.properties文件,内容如下:
# Set everything to be logged to the console
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 WARN. 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
则大于或等于ERROR的日志才会显示