我用hive创建了一个外表,在spark shell中可以shou展示,可在spark sql中不行
时间: 2024-05-12 19:19:35 浏览: 68
可能是因为在spark sql中需要显式地注册外部表才能使用它。
可以尝试在spark sql中使用以下代码注册外部表:
```scala
spark.sql("CREATE EXTERNAL TABLE <table_name> (...) LOCATION '<HDFS_location>'")
```
其中,`<table_name>`是外部表的名称,`<HDFS_location>`是HDFS中外部表的存储位置。
注册外部表后,就可以在spark sql中使用它了。
相关问题
sparkshell 操作hive表_Spark记录-Spark-Shell客户端操作读取Hive数据
可以使用Spark Shell客户端操作读取Hive数据。以下是一些常用的操作:
1. 启动Spark Shell
在终端中输入以下命令启动Spark Shell:
```
$ spark-shell --master yarn --deploy-mode client
```
2. 导入Spark SQL和Hive支持
在Spark Shell中输入以下命令导入Spark SQL和Hive支持:
```
scala> import org.apache.spark.sql.hive.HiveContext
scala> val hiveContext = new HiveContext(sc)
```
3. 查询Hive表
在Spark Shell中输入以下命令查询Hive表:
```
scala> val df = hiveContext.sql("SELECT * FROM <database>.<table>")
scala> df.show()
```
其中,<database>和<table>分别是Hive表所在的数据库和表名。
4. 将Hive表转换为Spark DataFrame
在Spark Shell中输入以下命令将Hive表转换为Spark DataFrame:
```
scala> val df = hiveContext.table("<database>.<table>")
scala> df.show()
```
5. 保存DataFrame到Hive表
在Spark Shell中输入以下命令将DataFrame保存到Hive表:
```
scala> df.write.mode("overwrite").saveAsTable("<database>.<table>")
```
其中,mode("overwrite")表示如果Hive表已经存在,则覆盖原有表,saveAsTable("<database>.<table>")表示将数据保存到指定的Hive表中。
希望这些操作可以帮助您在Spark Shell中操作Hive表。
spark-sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
Spark SQL可以与Hive整合,以便在Spark SQL命令和Spark Shell命令下执行SQL命令和调用Hive。要实现这一点,需要在Spark配置中设置以下属性:
1. spark.sql.catalogImplementation=hive
2. spark.sql.warehouse.dir=hdfs://<hive_warehouse_directory>
这些属性告诉Spark使用Hive作为其元数据存储,并指定Hive仓库目录的位置。
在Spark SQL命令下执行SQL命令时,可以使用以下语法:
```
spark-sql> SELECT * FROM <database_name>.<table_name>;
```
在Spark Shell命令下执行SQL命令时,可以使用以下语法:
```
spark.sql("SELECT * FROM <database_name>.<table_name>").show()
```
要调用Hive,可以使用以下语法:
```
spark.sql("CREATE TABLE <table_name> (col1 INT, col2 STRING) USING hive")
```
这将在Hive中创建一个新表。可以使用类似的语法来执行其他Hive操作。
阅读全文