0

在 IBM DSX 上,我遇到以下问题。

对于 DSX 上的 Spark 1.6 内核,有必要/有必要创建新的 SQLContext 对象以避免与metastore_db和有关的问题HiveContexthttp ://stackoverflow.com/questions/38117849/you-must-build-spark-with-hive-出口火花蜂巢真实/38118112#38118112

以下代码片段是使用 Spark 1.6 实现的,并且都适用于 Spark 2.0.2,但不适用于 Spark 2.1:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

df = sqlContext.createDataFrame([(1, "a"), (2, "b"), (3, "c"), (4, "d")], ("k", "v"))
df.count()

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

properties= {
    'jdbcurl': 'JDBCURL',
    'user': 'USER',
    'password': 'PASSWORD!'
}

data_df_1 = sqlContext.read.jdbc(properties['jdbcurl'], table='GOSALES.BRANCH', properties=properties)
data_df_1.head()

我收到此错误:

IllegalArgumentException: u"Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState':"

但是,当我第二次执行相同的代码时,它又可以工作了。

4

2 回答 2

1

IIRC,SQLContext只需要为 Bluemix 中的旧 Spark 服务 (bluemix_ipythonspark_16) 创建一个新服务。DSX 仅支持较新的服务 (bluemix_jupyter_bundle),其中创建新服务SQLContext更有可能在 Hive 中产生问题而不是解决问题。请尝试不使用。

于 2017-07-05T05:27:57.173 回答
1

您可以使用 SQLContext.getOrCreate(sc),而不是使用 SQLContext(sc) 创建新的 SQLContext。如果存在,这将返回一个现有的 SQLContext。

于 2017-07-11T19:09:02.993 回答