windows idea本地执行spark sql避坑

本地安装了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.show
    df2.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博客

你可能感兴趣的:(intellij-idea,spark,sql)