Spark问题汇总

在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的日志才会显示

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值