0

HI Coders,我又回来了。我正在尝试在我的 scala 代码中使用 HIve 上下文从数据帧创建一个配置单元表,我能够在 sqlContext 中做到这一点,但是当涉及到 HiveContext 时,它会抛出这个错误

[error] /home/mapr/avroProject/src/main/scala/AvroConsumer.scala:75: object HiveContext in package hive cannot be accessed in package org.apa                                                che.spark.sql.hive
[error] HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(sc.sc());

我也尝试过相同的声明,但声明略有不同,

val hiveContext = org.apache.spark.sql.hive.HiveContext(sc)

我也添加了 sbt 库依赖项,

libraryDependencies += "org.apache.spark" % "spark-hive_2.10" % "1.6.1"

我也试过“提供”。

这是我的一段代码

 messages.foreachRDD(rdd=>
{
 import org.apache.spark.sql.hive.HiveContext
HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(sc.sc());
//import org.apache.spark.sql.hive._
//val dataframe = sqlContext.read.json(rdd.map(_._2))
val dataframe =sqlContext.read.json(rdd.map(_._2))
val df =dataframe.toDF()

有什么解决办法吗?我从来没有遇到过这个“不可访问”的错误。

而且我还尝试从代码中创建一个 temptable

val dataframe =sqlContext.read.json(rdd.map(_._2))
 val df =dataframe.toDF()
  df.registerTempTable("mdl_events")

但是我在哪里可以找到 mdl_events 表?spark中是否有任何默认数据库可以在其中查找?不过,我不喜欢火花壳。

4

1 回答 1

0

嗨,我想通了,从 1.3v spark 开始,默认情况下 hivecontext 可作为 SqlContext 使用。因此,不鼓励明确调用 Hivecontext。下面的代码可以帮助克服这个问题,

messages.foreachRDD(rdd=>
      {
      val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
         import sqlContext.implicits._
      val dataframe =sqlContext.read.json(rdd.map(_._2))
      val df =dataframe.toDF()
})
于 2016-12-21T11:20:34.930 回答