2017-02-20 3 views
1

Я создал проект Maven, как pom.xmlSpark: Не в состоянии считывать данные из улья таблиц

<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>, тогда искра не может даже найти таблицу, присутствующую в метафоре улья, так почему же такое поведение ???

СРЕДА: Cloudera QUICKSTART VM 5.8.0

ответ

1

Они только трюк был поставить улей-site.xml в пути к классам.

0

Попробуйте это: -

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()) 
    } 
} 
+0

Я не хочу использовать sql здесь. Хотите использовать функцию scala здесь – saching

Смежные вопросы