我創建了一個Maven項目作爲pom.xml
星火:無法從蜂巢表中讀取數據
<spark.version>1.3.0</spark.version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<exclusions>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!-- <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency> -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
我的類,它是從蜂巢表中讀取數據:
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.DataFrame
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())
}
}
我使用的火花從蜂巢元件中的表中讀取數據,但面臨一個非常奇怪的問題。
我有兩個問題,如下所述:
問題1:如果我使用<spark.version>1.3.0</spark.version>
火花能夠找到蜂巢表,它是能夠與該行的幫助下在控制檯上打印數據
val table = hiveContext.sql("select * from test")
table.show()
但如果我通過做濾波器或組中的示例火花如圖找不到col1
和拋出異常如下
Exception in thread "main" java.util.NoSuchElementException: key not found: col1#0
所以問題是爲什麼如果數據框能夠找到該表,那麼爲什麼它不讓我在列上做羣組以及如何解決這個問題?
問題2.如果我使用<spark.version>1.6.0</spark.version>
那麼spark甚至無法找到蜂房metastore中存在的表,所以現在爲什麼是這種行爲?
環境:Cloudera的QUICKSTART VM 5.8.0
我不想在這裏使用sql。希望在這裏利用scala功能 – saching