访问 Spark.SQL

Posted

技术标签:

【中文标题】访问 Spark.SQL【英文标题】:Accessing Spark.SQL 【发布时间】:2017-02-28 23:06:46 【问题描述】:

我是 Spark 的新手。按照书中的以下示例,我发现下面的命令给出了错误。什么是运行 Spark-SQL 命令的最佳方式,同时在 Spark 中进行一般编码?

scala> // Use SQL to create another DataFrame containing the account
summary records
scala> val acSummary = spark.sql("SELECT accNo, sum(tranAmount) as TransTotal FROM trans GROUP BY accNo")
<console>:37: error: not found: value spark

我尝试导入 import org.apache.spark.SparkContext 或使用 sc 对象,但没有成功。

【问题讨论】:

【参考方案1】:

假设你在 spark-shell 中,那么首先获取一个 sql 上下文:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

那么你可以这样做:

val acSummary = sqlContext.sql("SELECT accNo, sum(tranAmount) as TransTotal FROM trans GROUP BY accNo")

【讨论】:

谢谢,Phasmid。您的提示帮助我追踪了问题。 大多数相对较新的 shell 版本都带有为您构建的 sqlContext【参考方案2】:

所以spark-shell 中可用的值spark 实际上是SparkSession (https://spark.apache.org/docs/2.0.2/api/scala/index.html#org.apache.spark.sql.SparkSession) 的一个实例

val spark = SparkSession.builder().getOrCreate()

会给你一个。

【讨论】:

感谢您的帮助,triggerNZ。【参考方案3】:

你用的是什么版本?看来您在 shell 中,这应该可以工作,但只能在 Spark 2+ 中使用 - 否则您必须使用 sqlContext.sql

【讨论】:

谢谢,贾斯汀。我正在使用 Spark 1.6,因此上述内容有所帮助。

以上是关于访问 Spark.SQL的主要内容,如果未能解决你的问题,请参考以下文章

无法从 impala/hive/spark sql 访问“spark 注册表”

使用 spark 访问 hive 数据

spark sql应该如何配置访问hive metastore? [复制]

在 HDP 的 spark2 sql 中无法访问 Hive 表

数据存储在对象存储中时从 Spark SQL 访问 Hive 表

Spark SQL 使用beeline访问hive仓库