必须使用 Hive 构建 Spark (spark 1.5.0)

Posted

技术标签:

【中文标题】必须使用 Hive 构建 Spark (spark 1.5.0)【英文标题】:must build Spark with Hive (spark 1.5.0) 【发布时间】:2015-09-30 05:23:40 【问题描述】:

下载 spark 1.5.0 预构建并通过 pyspark 这个简单代码运行

from pyspark.sql import Row
l = [('Alice', 1)]
sqlContext.createDataFrame(l).collect

产量错误:

15/09/30 06:48:48 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MResourceUri" is tagged as "embedded-only" so do
es not have its own datastore table.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\bigdata\spark-1.5\spark-1.5.0\python\pyspark\sql\context.py", line 408, in createDataFrame
    jdf = self._ssql_ctx.applySchemaToPythonRDD(jrdd.rdd(), schema.json())
  File "c:\bigdata\spark-1.5\spark-1.5.0\python\pyspark\sql\context.py", line 660, in _ssql_ctx
    "build/sbt assembly", e)
Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred
 while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o28))

所以尝试自己编译

c:\bigdata\spark-1.5\spark-1.5.0>.\build\apache-maven-3.3.3\bin\mvn  -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests -Phive -Phive-t

hriftserver 清理包

但在编译版本上仍然会出现相同的错误。

有什么建议吗?

【问题讨论】:

你忘了导入SqlContext,它必须包装spark Context 您可以尝试运行sqlContext._get_hive_ctx() 并查看您刚刚获得的日志。也许您会在其中找到一些指向正确方向的东西(对我来说,这是两个并发 pyspark 应用程序尝试初始化临时 Derby 数据库的问题)。 【参考方案1】:

在导入行后添加这些行

from pyspark import  SparkContext
from pyspark.sql import SQLContext
sc = SparkContext( 'local', 'pyspark')
sqlContext = SQLContext(sc)  

【讨论】:

不,pyspark 脚本会为您创建一个 SQLContext(实际上它会尝试创建一个 HiveContext)。在这种情况下,您不应该自己创建一个。

以上是关于必须使用 Hive 构建 Spark (spark 1.5.0)的主要内容,如果未能解决你的问题,请参考以下文章

错误:您必须使用 Hive 构建 Spark

Spark学习之路 (二十)SparkSQL的元数据[转]

Spark与Hive集成

使用 Spark 查询位于远程集群上的 Hive 数据

如何使用 spark 获取 hive 分区列名

Spark 无法查询它可以看到的 Hive 表?