TypeError:' JavaPackage'对象不可调用

时间:2016-07-05 13:30:40

标签: pyspark apache-spark-sql

当我编写spark sql API hiveContext.sql()

from pyspark import SparkConf,SparkContext
from pyspark.sql import SQLContext,HiveContext

conf = SparkConf().setAppName("spark_sql")

sc = SparkContext(conf = conf)
hc = HiveContext(sc)

#rdd = sc.textFile("test.txt")
sqlContext = SQLContext(sc)
res = hc.sql("use teg_uee_app")
#for each in res.collect():
#    print(each[0])
sc.stop()

我收到以下错误:

enFile "spark_sql.py", line 23, in <module>
res = hc.sql("use teg_uee_app")
File "/spark/python/pyspark/sql/context.py", line 580, in sql
    return DataFrame(self._ssql_ctx.sql(sqlQuery), self)
File "/spark/python/pyspark/sql/context.py", line 683, in _ssql_ctx
    self._scala_HiveContext = self._get_hive_ctx()
File "/spark/python/pyspark/sql/context.py", line 692, in _get_hive_ctx
return self._jvm.HiveContext(self._jsc.sc())
  TypeError: 'JavaPackage' object is not callable

如何添加SPARK_CLASSPATH或SparkContext.addFile?我不知道。

2 个答案:

答案 0 :(得分:4)

也许这会对你有所帮助:当使用HiveContext时,我必须在spark-submit参数中添加三个jar:

spark-submit --jars /usr/lib/spark/lib/datanucleus-api-jdo-3.2.6.jar,/usr/lib/spark/lib/datanucleus-core-3.2.10.jar,/usr/lib/spark/lib/datanucleus-rdbms-3.2.9.jar ...

当然,路径和版本取决于您的群集设置。

答案 1 :(得分:0)

在我的情况下,这被证明是一个类路径问题 - 我在类路径上有一个Hadoop jar,它是一个错误的Hadoop版本而不是我正在运行。

确保您只在一个地方设置执行程序和/或驱动程序类路径,并且没有应用系统范围的默认值,例如.bashrc或Spark&#39; conf/spark-env.sh