我一直在尝试在pyspark中运行此代码。
sqlContext = HiveContext(sc)
datumDF = sqlContext.createDataFrame(datumX, schema)
但一直收到这个警告:
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=o44))
我登录AWS并使用以下代码启动集群:/User/Downloads/spark-1.5.2-bin-hadoop2.6/ec2/spark-ec2 -k name -i /User/Desktop/pemfile.pem login clustername
然而,我发现的所有文档都涉及这些命令,这些命令存在于文件中/users/downloads/spark-1.5.2/
我已经运行了它们,并尝试登录,在登录之后使用该文件夹中的ec2命令。尽管如此,只是得到了相同的错误
在本地机器上运行这些命令之前,我提交了导出SPARK_HIVE=TRUE
,但我看到消息说它不推荐使用,无论如何都会被忽略。
用maven构建蜂窝:
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0
-Phive -Phive-thriftserver -DskipTests clean package
使用sbt-构建蜂窝
build/sbt -Pyarn -Phadoop-2.3 assembly
另一个我发现
./sbt/sbt -Phive assembly
我还拿了hive-site.xml file
,并放入了两个/Users/Downloads/spark-1.5.2-bin-hadoop2.6/conf folder and the /Users/Downloads/spark-1.5.2/conf
仍然没有运气。
无论我用什么构建或如何登录,我似乎都无法运行hive命令。有什么明显的我遗漏了吗。
在使用Spark包附带的EC2脚本构建的EC2集群上使用HiveContext
时,我也遇到了同样的错误(在我的案例中是v1.5.2)。经过多次尝试和错误,我发现用以下选项构建EC2集群可以获得正确版本的Hadoop,并正确构建Hive,这样我就可以在PySpark作业中使用HiveContext
:
spark-ec2 -k <your key pair name> -i /path/to/identity-file.pem -r us-west-2 -s 2 --instance-type m3.medium --spark-version 1.5.2 --hadoop-major-version yarn launch <your cluster name>
这里的关键参数是将--spark-version
设置为1.5.2,将--hadoop-major-version
设置为yarn
——尽管您不使用Yarn提交作业,因为它强制hadoop构建为2.4。当然,根据需要的集群调整其他参数。