1

我正在尝试将最新的 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 文件夹。

请参阅工作解决方案的答案。

4

2 回答 2

1

目前,对于带有 Spark 的 DSX Notebooks,1.6.3 版cloudant-spark是开箱即用的。这意味着这个包的 jar 是在 上提供的,gpfs并且 jar 的路径被添加到各种环境变量中,这样在启动内核时它就会被添加到运行时环境中。

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

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

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

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

  1. 在您的 DSX 项目中打开一个 Python 笔记本。
  2. 找出您的 USERID

    !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,但它只是一个短期的临时解决方法!

于 2017-01-04T10:31:03.563 回答
1

从 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 服务的产品管理来正式升级这个库。

于 2017-01-04T12:36:10.520 回答