访问 Hive 中已经存在的表
Posted
技术标签:
【中文标题】访问 Hive 中已经存在的表【英文标题】:Accessing already present table in Hive 【发布时间】:2019-08-11 07:54:48 【问题描述】:我在 hive 中创建了 book_crossing_dataset 数据库,并在其中创建了 3 个表。
1) bx_books 2) bx_books_ratings 3) bx_user
如下图
create database book_crossing_dataset;
use book_crossing_dataset;
add jar /home/cloudera/Downloads/ccsv-serde-0.9.1.jar;
create external table stage_bx_user(
User_ID int,
Location string,
Age int
)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties(
"separatorChar" = "\;",
"quoteChar" = "\"")
stored as textfile
tblproperties ("skip.header.line.count"="1");
load data local inpath "/home/cloudera/workspace/BX-CSV-Dump/BX-Users.csv" into table stage_bx_user;
create external table bx_user(
User_ID int,
Location string,
Age int
)
stored as parquet;
insert into table bx_user select * from stage_bx_user;
现在我想从 spark 查询这个表,但是当我使用下面的代码时
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import HiveContext
conf = SparkConf().setAppName("Book Crossing")
sc = SparkContext(conf=conf)
hc = HiveContext(sc)
books = hc.sql("show databases")
print(books.show())
那里只显示默认数据库。
我使用下面的链接作为参考 Query HIVE table in pyspark
【问题讨论】:
您提到您需要创建book_crossing_dataset
数据库,但我在您的代码中的任何地方都看不到这个数据库,除了您的问题描述。如果它不存在,您为什么希望在 show databases
查询中看到它?
@RichardNemeth 也在代码中添加了该行。我通过 hive shell 运行数据库和表创建命令。
【参考方案1】:
您有一个创建数据库的调用,但您从未在创建表调用中使用它。我建议您将脚本的前 3 行更改为
create database if not exists book_crossing_dataset;
use book_crossing_dataset;
add jar /home/cloudera/Downloads/ccsv-serde-0.9.1.jar;
如果这没有帮助,那么问题在于 Spark 配置。我建议在启用 Hive 支持的情况下通过 SparkSession
尝试:
import pyspark
spark = pyspark.sql.SparkSession.builder. \
appName("Book Crossing").enableHiveSupport().getOrCreate()
spark.sql("show databases").show()
【讨论】:
我也试过了,结果还是一样。如何解决 Spark 配置问题? 尝试将配置单元元存储配置添加到构建器builder.config("hive.metastore.uris", "YOUR_METASTORE_URL")
。以上是关于访问 Hive 中已经存在的表的主要内容,如果未能解决你的问题,请参考以下文章