使用 spark 访问 hive 数据

Posted

技术标签:

【中文标题】使用 spark 访问 hive 数据【英文标题】:Accessing hive data using spark 【发布时间】:2017-05-09 10:53:35 【问题描述】:

我想:

%spark
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
sqlContext.sql(LOAD DATA LOCAL INPATH '//filepath' INTO TABLE src)

sqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

但是我遇到了错误:

:4: 错误:')' 预期但 '(' 找到。 sqlContext.sql("FROM src SELECT键,值").collect().foreach(println)

如何解决这个错误?

【问题讨论】:

请指定以下内容:Spark 的哪个版本?什么环境(Shell/Notebook/App?) 【参考方案1】:

您应该使用标准 SQL 语法:

sqlContext.sql("SELECT key, value FROM src").show()

更重要的是,每个sql命令都应该有String作为参数,第二个命令没有“”

sqlContext.sql("LOAD DATA LOCAL INPATH '//filepath' INTO TABLE src")

【讨论】:

除了sqlContext.sql("LOAD DATA LOCAL INPATH '//filepath' INTO TABLE src")之外,一切看起来都不错 答案没有错。据我了解,他只是错过了问题中所述行中的引号。【参考方案2】:

你可以试试这个吗?

import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc) # creating hive context
sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
sqlContext.sql("LOAD DATA LOCAL INPATH '//filepath' INTO TABLE src")
val srcRDD = sqlContext.sql("SELECT key, value FROM src")
srcRDD.collect().foreach(println) # printing the data

【讨论】:

srcRDD 不是 RDD :) 它会工作,我的回答也显示了同样的错误。但是 srcRDD 不是 RDD,而是 DataFrame。检查类型 :) 其次,你应该发布为什么某些东西不工作 抱歉 spark-1.2.0 它是 RDD 但在最新版本中它是 DataFrame。

以上是关于使用 spark 访问 hive 数据的主要内容,如果未能解决你的问题,请参考以下文章

hbase可以访问hive里面的表吗

无法使用 Pyspark 访问外部 Hive 元存储

Hive数据仓库--Java代码JDBC方式访问Hive中表的数据

hive的(ql)hql使用和基于UDF的用法;以及java对hive的远程访问

大数据技术之Hive基本概念安装数据类型

大数据技术之Hive基本概念安装数据类型