spark:无法从配置单元表读取数据

vwoqyblh  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(367)

我创建了一个maven项目作为 pom.xml ```
<spark.version>1.3.0</spark.version>


org.apache.spark
spark-core_2.11
${spark.version}


org.scala-lang
scala-library




org.apache.spark
spark-sql_2.11
${spark.version}



org.apache.spark
spark-hive_2.11
${spark.version}

class SparkHive {
def createTable = {
val conf = new SparkConf().setMaster("local").setAppName("My First spark app")
val sparkCtxt = new SparkContext(conf)
val hiveContext = new HiveContext(sparkCtxt)
hiveContext.setConf("hive.metastore.uris", "thrift://127.0.0.1:9083")
val table = hiveContext.sql("select * from test")
table.show()
val gpData = table.groupBy("col1")
println(gpData.max("col2").show())
}
}

我正在使用spark从hivemetastore中的一个表中读取数据,但是遇到了一个非常奇怪的问题。
我有两个问题,如下所述:
问题1。如果我使用 `<spark.version>1.3.0</spark.version>` spark能够找到hive表,并且能够在控制台上通过这条线打印数据

val table = hiveContext.sql("select * from test")
table.show()

但是如果我按示例中所示进行筛选或分组,spark就找不到了 `col1` 并抛出如下异常

Exception in thread "main" java.util.NoSuchElementException: key not found: col1#0

所以问题是,如果Dataframe能够找到那个表,那么为什么它不允许我按列分组,以及如何解决这个问题??
问题2。如果我使用 `<spark.version>1.6.0</spark.version>` 那么spark甚至无法在hive metastore中找到表,那么现在为什么会出现这种行为???
环境:cloudera quickstart vm 5.8.0
wlwcrazw

wlwcrazw1#

他们唯一的窍门就是将hive-site.xml放在类路径中。

xghobddn

xghobddn2#

试试这个:-

def createTable = {
    val conf = new SparkConf().setMaster("local").setAppName("My First spark app")
    val sparkCtxt = new SparkContext(conf)
    val hiveContext = new HiveContext(sparkCtxt)
    hiveContext.setConf("hive.metastore.uris", "thrift://127.0.0.1:9083")
    val table = hiveContext.sql("select * from test")
    table.show()
    table.registerTempTable("table")
    val gpData = hiveContext.sql("select max(col2) from table group by col1")
    println(gpData.show())
  }
}

相关问题