2017-07-04 47 views
0

在IBM DSX上,我遇到以下問題。新的SQLContext:Spark 1.6向後兼容Spark 2.1

有關DSX這是星火1.6粒/是必要的,以避免與metastore_dbHiveContext問題,創造新SQLContext對象:http://stackoverflow.com/questions/38117849/you-must-build-spark-with-hive-export-spark-hive-true/38118112#38118112

下面的代碼片段中使用的Spark 1.6實現,都跑了星火2.0.2,而不是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':" 

但是,當我再次執行相同的代碼時,它再次工作。

回答

1

而不是使用SQLContext(sc)創建新的SQLContext,您可以使用SQLContext.getOrCreate(sc)。這將返回現有的SQLContext(如果存在)。

1

IIRC,創建新的SQLContext僅適用於Bluemix中舊版Spark服務(bluemix_ipythonspark_16)。 DSX僅支持較新的服務(bluemix_jupyter_bundle),其中創建新的SQLContext更有可能造成Hive問題而不是解決它們。請嘗試沒有。