本地安装了IDEA,并配置好了相关POM,可以在本机使用sparkSession连接数据,并在数据库执行sql,在idea展示执行结果。
但是,如果将数据的查询结果建立到spark中,再展示,就会报错
Error while running command to get file permissions : java.io.IOException: (null) entry in command string: null ls -F D:\tmp\hive
println(sql)//sql = s"(select * from mtl_system_items_b where rownum < 10) b"dbConf += ("dbtable" -> sql)val df2 = spark.read.format("jdbc").options(dbConf).load()df2.showdf2.createOrReplaceTempView("boms")print("show results")spark.sql("select * from boms").show()
在df2.show的时候,是可以正常展示数据的
但是使用createOrReplaceTempView后,使用spark.sql("").show(),展示数据就会报错。
原因:
经过网上各种查询,有个靠谱的解释是本机没有配置hadoop,导致idea在执行的时候报错
解决方法:
1.找同事要了hadoop文件(也可以在网上下载)
2.将hadoop文件解压缩,放到一个位置,哪里都好,我是放到了idea的文件夹下
3. 修改环境变量,建立HADOOP_HOME,并且在path配置文件下吧HADOOP_HOME文件加进去
4. 修改hadoop下的jdk文件路径,修改的时候注意跟进参考文档中修改,否则执行会报错
5. 重启电脑,必须重启电脑
6. 在idea执行程序,还是会报错,但是错误变了,网上的解释是,缺少文件winutils.exe,从以下地址下载,下载完成后,放到hadoop/bin下面
https://raw.githubusercontent.com/steveloughran/winutils/master/hadoop-2.6.0/bin/winutils.exe
7. 重启idea,执行代码,还是报错,有点头晕,一狠心,把D:tmp文件夹给删掉了,在执行idea的程序,正常输出了
具体操作参考:
hadoop-2.7.3 在windows环境下安装(无需Cygwin)-CSDN博客
winutils.exe的参考文档
spark代码连接hive_本地spark连接hive相关问题总结-CSDN博客