新的SQLContext:Spark 1.6向后兼容Spark 2.1

时间:2017-07-04 14:05:49

标签: apache-spark pyspark data-science-experience

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

对于DSX上的Spark 1.6内核,有必要创建新的SQLContext对象,以避免metastore_dbHiveContext出现问题:http://stackoverflow.com/questions/38117849/you-must-build-spark-with-hive-export-spark-hive-true/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':"

然而,当我再次执行相同的代码时,它再次起作用。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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