笔记本

时间:2016-12-25 18:54:23

标签: apache-spark ibm-cloud data-science-experience spark-cloudant

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

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

2 个答案:

答案 0 :(得分:1)

目前,对于使用Spark的DSX笔记本电脑,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. 使用

    找出您的USERID

    !whoami

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

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

  4. 您会注意到那里没有spark-cloudant jar。

    1. 将较新版本的spark-cloudant转储到Spark libs的用户特定目录(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

    3. 您会注意到那里存在版本1.6.4的spark-cloudant jar。

      1. 重新启动Scala笔记本的内核并再次尝试使用您的代码。
      2. 这种方法对我来说可以修补spark-cloudant的版本,但这只是一个短期和暂时的解决方法,只有!

答案 1 :(得分: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服务的产品管理正式升级这个库。