Pyspark中遇到的 java.io.IOException: Not a file 和 pyspark.sql.utils.AnalysisException: 'Table or view not found
最近执行pyspark时,直接读取hive里面的数据,经常遇到几个问题:
1. java.io.IOException: Not a file —— 然而事实上文件是存在的,是 hdfs 的默认路径出了错,需要配置 --files 和 --conf。
2. pyspark.sql.utils.AnalysisException: 'Table or view not found —— 事实上在hive里面是存在这个表的,但是却显示找不到。
3. org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'XXXXX' not found; —— 直接显示数据库找不到,是因为没有配置enableHiveSupport(),例如需要设置:spark = SparkSession.builder.master("local").appName("SparkOnHive").enableHiveSupport().getOrCreate()
出现这些问题的原因:
在我这里测试的是:hive配置以及spark-submit提交作业时,参数未设置造成。
# 以下测试通过 import os # from pyspark import SparkContext, SparkConf from pyspark.sql.session import SparkSession from pyspark.sql import HiveContext import sys os.environ["PYSPARK_PYTHON"]="/usr/bin/python3" spark = SparkSession.builder.master("local").appName("SparkOnHive").enableHiveSupport().getOrCreate() #必须配置 enableHiveSupport hive_text = HiveContext(spark) print(sys.getdefaultencoding()) hive_text.sql('use default') #选择数据库名 data_2 = hive_text.sql("select * from word_test") #执行查询语句 #data_2 = hive_text.sql("select * from test_table_words") data_3 = data_2.select("first_column_name").collect() #选择表中的某一列,或某几列,需要输入列名 print(data_3[0][0]) print(data_2.collect()[0]) print(data_2.collect()[0][0]) print("------ finished ------")
以上代码保存为:test.py
在命令行或者shell执行时,需要使用:
spark-submit --files /opt/spark/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml --conf spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive=true test.py
其中:
--files:用于添加hive配置文件,首先注意的是:你的hadoop、spark、hive等都是安装配置好的,建议安装spark_with_hive之类已经编译好的spark。
--conf:一个关键配置,这个配置还在学习中
在上述方法执行成功后,第二次执行时发现:spark-submit --files /opt/spark/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml test.py 也可以直接执行了,有点懵,可能在hive-site.xml中设置了--conf,还在继续学习中。
注意:此时并不需要在代码里面设置spark.sql.warehouse.dir:config("spark.sql.warehouse.dir", some_path)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架