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

如何使用IntelliJ上的Scala从spark连接到Hive?,scala,apache-spark,intellij-idea,hive,Scala,Apache Spark,Intellij Idea,Hive,我对hive和spark还不熟悉,我正试图找到一种方法来访问hive中的表,以操作和访问数据。怎样做呢?在spark

我对hive和spark还不熟悉,我正试图找到一种方法来访问hive中的表,以操作和访问数据。怎样做呢?

在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被移动到此处。 --从文件中


如果您的配置单元服务器位于远程群集上,您可以参考通过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()

请注意,这种方法远不能理想地运行生产工作负载,因为所有数据都需要先通过驱动程序,然后才能发送到工作节点。不过,如果您只是在进行一些开发,这可能会有所帮助。@Havnar作者是新手,正在寻找如何使用IDE访问和操作本地计算机中的数据的建议。
…warehouse.dir
是否从驱动程序(如spark shell)或工作节点的角度来指代某个位置?我的工作人员可以通过
hdfs
from
hdfs://namenodeHA/apps/hive/warehouse/some_db.db/some_table
,但我的驱动程序不能。我应该如何指定位置?您的驱动程序是在托管群集内运行还是在托管群集外运行?当你的员工可以看到metastore,而你的司机却不能避开它时,这似乎就在它之外了。谢谢
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()