如何使用SPARK查询HIVE



我正在尝试使用spark在配置单元表上运行查询。我在网上关注了很多文章,但都没有成功。我已将hive-site.xml文件移动到spark位置。

你能解释一下怎么做吗?我正在使用Spark 1.6

提前谢谢。

请在下面找到我的代码。

import sqlContext.implicits._
import org.apache.spark.sql
val eBayText = sc.textFile("/user/cloudera/spark/servicesDemo.csv")
val hospitalDataText = sc.textFile("/user/cloudera/spark/servicesDemo.csv")
val header = hospitalDataText.first()
val hospitalData = hospitalDataText.filter(a=>a!=header)
case class Services(uhid:String,locationid:String,doctorid:String)
val hData = hospitalData.map(_.split(",")).map(p=>Services(p(0),p(1),p(2)))
val hosService = hData.toDF()
hosService.write.format("parquet").mode(org.apache.spark.sql.SaveMode.Append).save("/user/hive/warehouse/hosdata")

此代码在指定路径创建了"hosdata"文件夹,其中包含"parquet"格式的数据。

但当我去蜂箱检查表是否创建时,我看不到任何表名为"hosdata"。

所以我在命令之下运行。

hosService.write.mode("overwrite").saveAsTable("hosData")
sqlContext.sql("show tables").show

显示以下结果

+--------------------+-----------+
|           tableName|isTemporary|
+--------------------+-----------+
|             hosdata|      false|
+--------------------+-----------+

但当我再次检查蜂箱时,我看不到表"hosdata">

有人能告诉我缺了哪一步吗?

使用Spark查询Hive有多种方法。

  1. 与Hive CLI一样,您可以使用Spark SQL进行查询
  2. Sparkshell可用于运行Spark类文件,您需要在其中定义变量,如hive、Spark配置对象。Spark Context-sql((方法允许您执行可能在Hive上执行的相同查询

性能调优无疑是一个重要的方面,因为您可以使用广播和其他方法来加快执行速度。

希望这能有所帮助。

最新更新