Новый SQLContext: Spark 1.6 с обратной совместимостью со Spark 2.1
На IBM DSX у меня следующая проблема.
Для ядер Spark 1.6 в DSX было / необходимо создать новые объекты SQLContext, чтобы избежать проблем с metastore_db
а также HiveContext
: /questions/44371234/vyi-dolzhnyi-postroit-iskru-s-ulej-eksportirovat-sparkhivetrue/44371246#44371246
Следующие фрагменты кода были реализованы с использованием 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 ответа
Вместо создания нового SQLContext с использованием SQLContext(sc) вы можете использовать SQLContext.getOrCreate(sc). Это вернет существующий SQLContext, если он существует.
IIRC, создавая новый SQLContext
был необходим только для устаревших сервисов Spark (bluemix_ipythonspark_16) в Bluemix. DSX поддерживает только новые сервисы (bluemix_jupyter_bundle), где создаются новые SQLContext
скорее создаст проблемы с Hive, чем решит их. Пожалуйста, попробуйте без.