SparkSQL与Hive连接异常:查询返回空行但列信息正常
问题:Spark读取Hive表返回0行但列结构正常(Hive中表确有数据)
我尝试从Hive数据库读取数据到Spark中,该数据库在Hive中确认存在数据,但使用Spark执行查询时返回0行(不过能正常返回列信息)。已将hive-site.xml文件复制到Spark配置目录中。相关代码如下:
导入语句
import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.sql import org.apache.spark.storage.StorageLevel import org.apache.spark.sql.SparkSession import org.apache.spark.sql.hive.HiveContext
创建SparkSession
val spark = SparkSession.builder().appName("Reto").config("spark.sql.warehouse.dir", "hive_warehouse_hdfs_path").enableHiveSupport().getOrCreate() spark.sql("show databases").show()
查询数据
spark.sql("USE retoiabd") val churn = spark.sql("SELECT count(*) FROM churn").show()
输出结果
count(1) = 0
排查与解决建议
- 检查
spark.sql.warehouse.dir配置的HDFS路径是否与Hive实际仓库路径一致。在Hive命令行执行show variables like 'hive.metastore.warehouse.dir';获取真实路径,确保Spark配置的路径完全匹配,包括HDFS命名空间前缀(如hdfs://namenode:9000)。 - 验证Spark运行用户对Hive表对应HDFS目录的读权限。执行
hdfs dfs -ls /path/to/hive/table/churn查看目录权限,确保Spark用户拥有读权限,若权限不足需调整HDFS目录权限。 - 确认Hive表存储格式的Spark兼容性。在Hive命令行执行
desc formatted churn;查看Storage Format字段,确保是Spark支持的格式(如Parquet、ORC、TextFile等),若为自定义格式需确认Spark是否有对应解析依赖。 - 刷新Hive表元数据。在Spark中执行
spark.sql("REFRESH TABLE churn;")后重新查询,或重启SparkSession重新加载元数据,避免元数据不同步导致的问题。 - 核对库表名大小写。Hive与Spark的大小写敏感性可能存在差异,确保
USE retoiabd和FROM churn中的库名、表名与Hive中的完全一致(包括大小写)。
内容的提问来源于stack exchange,提问作者Yery
相关产品推荐
相关产品推荐

