必须使用 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)的主要内容,如果未能解决你的问题,请参考以下文章