【问题标题】:HiveContext createDataFrame not working on pySpark (jupyter)HiveContext createDataFrame 在 pySpark (jupyter) 上不起作用
【发布时间】:2016-07-14 06:15:34
【问题描述】:

我正在使用 Jupyter 笔记本对 pySpark 进行分析。我的代码最初使用 sqlContext = SQLContext(sc) 构建数据框,但现在我已切换到 HiveContext,因为我将使用窗口函数。

我的问题是现在我在尝试创建数据框时遇到了 Java 错误:

## Create new SQL Context.
from pyspark.sql import SQLContext
from pyspark.sql import DataFrame
from pyspark.sql import Window
from pyspark.sql.types import *
import pyspark.sql.functions as func

sqlContext = HiveContext(sc)

之后,我将数据读入 RDD,并为我的 DF 创建架构。

## After loading the data we define the schema.
fields = [StructField(field_name, StringType(), True) for field_name in data_header]
schema = StructType(fields)

现在,当我尝试构建 DF 时,这是我得到的错误:

## Build the DF.
data_df = sqlContext.createDataFrame(data_tmp, schema)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
...
/home/scala/spark-1.6.1/python/pyspark/sql/context.pyc in _get_hive_ctx(self)
    690 
    691     def _get_hive_ctx(self):
--> 692         return self._jvm.HiveContext(self._jsc.sc())
    693 
    694     def refreshTable(self, tableName):

TypeError: 'JavaPackage' object is not callable

到目前为止,我一直在谷歌上搜索它,但没有运气。非常感谢任何建议。

【问题讨论】:

  • 看来您自己构建了 Spark,对吗?如果是这种情况,您能否提供有关该方法的一些详细信息?
  • @zero323 是的,我遵循了一个与这个非常相似的教程:blog.prabeeshk.com/blog/2014/10/31/…。它看起来像一个配置问题吗?如果您对如何解决此问题有任何建议,我愿意重新安装。谢谢。

标签: java python apache-spark pyspark spark-hive


【解决方案1】:

HiveContext 需要构建带有 Hive 支持的二进制文件。这意味着您必须启用 Hive 配置文件。由于您使用sbt assembly,您至少需要:

sbt -Phive assembly

使用 Maven 构建时也是如此,例如:

mvn -Phive -DskipTests clean package

【讨论】:

  • 谢谢,我试过sbt -Phive assembly,但现在它在抱怨Not a valid command: Phive。在尝试组装之前,我是否需要下载任何内容或执行任何其他操作?
  • 我听起来不太对劲。你确定那里没有遗漏吗?你有安装sbt吗?如果没有,那么您可以使用build/sbt。如果你不能解决这个问题,你也可以尝试弃用:SPARK_HIVE=true build/sbt assembly
  • 我确实安装了 sbt,当我运行它确实开始编译的命令时,它会在几分钟后失败。这是 sbt -Phive 程序集的完整输出日志:pastebin.com/yMDzk5WD 你有什么建议吗?我有点卡在这里,无法访问所有 HiveContext 函数。
  • 终于成功了!问题是我正在使用我在我的机器上安装的 sbt 版本进行组装,而不是 spark 附带的版本。所以运行它的正确方法是:/home/scala/spark-1.6.1$sudo sbt/sbt -Phive assembly。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2018-03-22
  • 2018-02-19
  • 1970-01-01
  • 2019-03-09
  • 2018-10-30
相关资源
最近更新 更多