一、实现功能
sparksql代码中多需要读取hive中不同库的表,本文两种方法实现如何从代码中实现操作不同数据库的实现。
二、实现方法
1.pom.xml依赖
<!-- Spark Core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>compile</scope>
</dependency>
<!-- Spark SQL -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>${spark.version}</version>
<scope>compile</scope>
</dependency>
2.相关配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cmcGcgh0-1599991343864)(Scala解析json字符串.assets/1599991223648.png)]
3.代码
package _20200913module
import org.apache.spark.sql.SparkSession
/**
* Created by Administrator on 2018/10/1.
* Hive Comtext 的使用
* 使用时需要通过 --jars 把mysql的驱动传递到classpath
*/
object HiveContextApp {
def main(args: Array[String]): Unit = {
// val path=args(0)
//1)创建相应的Context
val spark= SparkSession
.builder().appName("HiveContextApp")
.master("local[2]")
.config("spark.sql.parquet.writeLegacyFormat", "true")
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.sql.hive.manageFilesourcePartitions", "false")
.enableHiveSupport()
.getOrCreate()
val sc =spark.sparkContext
//sql相关
val sql=spark.sqlContext
sc.textFile("datas/info.txt")
//2)使用test数据库
//方法1
sql.sql("use test") //这个是可以的
val tab= sql.table("movie_info")
tab.show()
//方法2
sql.sql("select * from test.movie_info").show()
/**
* +-----------+--------------------+
* | movie| category|
* +-----------+--------------------+
* | 《疑犯追踪》| [悬疑, 动作, 科幻, 剧情]|
* |《Lie to me》|[悬疑, 警匪, 动作, 心理, 剧情]|
* | 《战狼 2》| [战争, 动作, 灾难]|
* +-----------+--------------------+
*
* +-----------+--------------------+
* | movie| category|
* +-----------+--------------------+
* | 《疑犯追踪》| [悬疑, 动作, 科幻, 剧情]|
* |《Lie to me》|[悬疑, 警匪, 动作, 心理, 剧情]|
* | 《战狼 2》| [战争, 动作, 灾难]|
* +-----------+--------------------+
*/
//3)关闭context
sc.stop()
}
}