如何使用IntelliJ上的Scala从spark连接到Hive?

时间:2017-07-17 21:16:14

标签: scala apache-spark intellij-idea hive

我是hive和spark的新手,我正试图找到一种方法来访问hive中的表来操作和访问数据。怎么办呢?

2 个答案:

答案 0 :(得分:1)

in spark< 2.0

 val sc = new SparkContext(conf)

 val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
 val myDataFrame = sqlContext.sql("select * from mydb.mytable")

在更高版本的spark中,使用SparkSession:

  

SparkSession现在是Spark的新入口点,取代旧版本   SQLContext和HiveContext。注意旧的SQLContext和   保留HiveContext是为了向后兼容。一个新的目录   可以从SparkSession访问接口 - 数据库上的现有API   和表访问,如listTables,createExternalTable,   dropTempView,cacheTable在这里移动。    - 来自文档

val spark = SparkSession
  .builder()
  .appName("Spark Hive Example")
  .config("spark.sql.warehouse.dir", warehouseLocation)
  .enableHiveSupport()
  .getOrCreate()
 val myDataFrame = spark.sql("select * from mydb.mytable")

答案 1 :(得分:0)

如果你的配置单元服务器驻留在远程集群上,你可以通过jdbc连接引用数据,如:

import scala.collection.mutable.MutableList

case class TempTable (
  column1: String,
  column2: String
)

val conn: Connection = DriverManager.getConnection(url, user, password)
val res: ResultSet = conn.createStatement
                   .executeQuery("SELECT * FROM table_name")
val fetchedRes = MutableList[TempTable]()
while(res.next()) {
  var rec = TempTable(res.getString("column1"), 
     res.getString("column2"))
  fetchedRes += rec
}
conn.close()
val resultRDD = sc.parallelize(fetchedRes)
resultRDD.cache()