%AddJar 加载的 Spark-cloudant 包 1.6.4 未被笔记本使用

Spark-cloudant package 1.6.4 loaded by %AddJar does not get used by notebook

我正在尝试将最新的 spark-cloudant 包与笔记本一起使用:

%AddJar -f https://github.com/cloudant-labs/spark-cloudant/releases/download/v1.6.4/cloudant-spark-v1.6.4-167.jar

输出:

Starting download from https://github.com/cloudant-labs/spark-cloudant/releases/download/v1.6.4/cloudant-spark-v1.6.4-167.jar
Finished download of cloudant-spark-v1.6.4-167.jar

其次是:

val dfReader = sqlContext.read.format("com.cloudant.spark")
dfReader.option("cloudant.host", sourceDB.host)
if (sourceDB.username.isDefined && sourceDB.username.get.nonEmpty) dfReader.option("cloudant.username", sourceDB.username.get)
if (sourceDB.password.isDefined && sourceDB.password.get.nonEmpty) dfReader.option("cloudant.password", sourceDB.password.get)
val df = dfReader.load(sourceDB.database).cache()

输出:

Use connectorVersion=1.6.3, dbName=ratingdb, indexName=null, viewName=null,jsonstore.rdd.partitions=5, + jsonstore.rdd.maxInPartition=-1,jsonstore.rdd.minInPartition=10, jsonstore.rdd.requestTimeout=900000,bulkSize=20, schemaSampleSize=1

连接器是 1.6.3。我的笔记本是:

Scala 2.10 with Spark 1.6

我试过重新启动内核,但没有用。

其他调试信息:

Server Information:

You are using Jupyter notebook.

The version of the notebook server is 4.2.0 and is running on:
Python 2.7.11 (default, Jun 24 2016, 12:41:03) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]

Current Kernel Information:

IBM Spark Kernel

更新

我尝试了以下方法:

import sys.process._

"test -d ~/data/libs/scala-2.10" #|| "mkdir -p ~/data/libs/scala-2.10" !
"wget -c -O ~/data/libs/scala-2.10/cloudant-spark-v1.6.4-167.jar https://github.com/cloudant-labs/spark-cloudant/releases/download/v1.6.4/cloudant-spark-v1.6.4-167.jar" !
"ls ~/data/libs/scala-2.10/" !

println("Now restart the kernel")

不幸的是,这没有用 - 1.6.3 仍在使用中。

更新 2

在上面的代码中,tilda 似乎没有解析到我的 HOME 文件夹。

查看工作解决方案的答案。

目前,对于带 Spark 的 DSX Notebooks,cloudant-spark 的 1.6.3 版支持开箱即用。这意味着此包的 jar 已在 gpfs 上提供,并且 jar 的路径已添加到各种环境变量中,以便在启动内核期间将其添加到运行时环境中。

当您使用 %AddJar 魔法时,由于魔法的实现和下载路径的位置,它可能无法重载旧版本,请参阅 https://github.com/ibm-et/spark-kernel/wiki/List-of-Current-Magics-for-the-Spark-Kernel .

运行时环境(包括 Spark)的设置包括在不同步骤添加各种 jar,因此如果您的目标是使用 spark-cloudant 的 1.6.4 版本,则必须尝试在 gpfs​​ 上找到一个位置来转储 jar,以便在正确的时间将其拉出(这里有些猜测,因为我没有关于设置的完整图片!)。

作为长期解决方案,我建议您联系 spark 服务支持并提交支持新版本的请求,以便开箱即用。

作为短期解决方案(当运行时环境的设置步骤发生变化时可能不起作用),您可以执行以下操作:

  1. 在您的 DSX 项目中打开一个 Python 笔记本。
  2. 通过

    找到您的用户 ID

    !whoami

  3. 使用(USERID = 步骤 2 的输出)检查您的用户特定目录中的 Spark 库:

    !ls /gpfs/fs01/user/USERID/data/libs

您会注意到 spark-cloudant 罐子在那里不存在。

  1. spark-cloudant 的较新版本转储到 Spark 库的用户特定目录(USERID = 第 2 步的输出):

    !wget https://github.com/cloudant-labs/spark-cloudant/releases/download/v1.6.4/cloudant-spark-v1.6.4-167.jar -P /gpfs/fs01/user/USERID/data/libs

  2. 使用(USERID = 步骤 2 的输出)检查用户特定目录中的 Spark 库:参见步骤 3

您会注意到那里有 spark-cloudant 版本 1.6.4 的 jar。

  1. 重新启动 Scala 笔记本的内核并再次尝试您的代码。

该方法对我修补 spark-cloudant 的版本有效,但它只是一个短期的临时解决方法!

运行 来自 Scala 笔记本的以下代码对我有用:

import sys.process._

val HOME = sys.env("HOME")
val DESTDIR = s"${HOME}/data/libs/scala-2.10"

s"test -d ${DESTDIR}" #|| s"mkdir -p ${DESTDIR}" !
s"wget -q -c -O ${DESTDIR}/cloudant-spark-v1.6.4-167.jar https://github.com/cloudant-labs/spark-cloudant/releases/download/v1.6.4/cloudant-spark-v1.6.4-167.jar" !
s"ls ${DESTDIR}/" !

我也申请了spark服务的产品管理正式升级这个库