【问题标题】:Spark: Not able to read data from hive tablesSpark:无法从配置单元表中读取数据
【发布时间】:2017-02-20 16:38:25
【问题描述】:

我创建了一个 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>

我的班级正在从 hive 表中读取数据:

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

我正在使用 spark 从 hive metatore 中存在的表中读取数据,但面临一个非常奇怪的问题。

我有两个问题,如下所述:

问题 1. 如果我使用&lt;spark.version&gt;1.3.0&lt;/spark.version&gt;,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

所以问题是为什么如果数据框能够找到该表,那么为什么它不让我对列进行分组以及如何解决这个问题??

问题 2。 如果我使用 &lt;spark.version&gt;1.6.0&lt;/spark.version&gt;,那么 spark 甚至无法找到 hive 元存储中存在的表,所以现在为什么会出现这种行为???

环境:CLOUDERA QUICKSTART VM 5.8.0

【问题讨论】:

    标签: hadoop apache-spark hive metastore hivecontext


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个:-

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

      【讨论】:

      • 这里不想用sql。想在这里利用 scala 函数
      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2022-01-23
      • 2018-07-27
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多