簡體   English   中英

如何在 IntelliJ 上使用 Scala 從 Spark 連接到 Hive?

[英]How do I connect to Hive from spark using Scala on IntelliJ?

我是 hive 和 spark 的新手,正在嘗試找出一種方法來訪問 hive 中的表以操作和訪問數據。 如何做呢?

在火花 < 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")

如果您的配置單元服務器駐留在遠程集群上,您可以參考通過 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM