微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Spark 读取 Kudu 表时出现问题带有 Apache Toree 的 Jupyer Notebook - Scala Kernel

如何解决使用 Spark 读取 Kudu 表时出现问题带有 Apache Toree 的 Jupyer Notebook - Scala Kernel

我正在尝试在运行 Apache Toree - Scala 内核的 Jupyter Notebook 中使用 Apache Spark 读取 Kudu 表。

Spark 版本:2.2.0 斯卡拉版本:2.11 Apache Toree 版本:0.3

这是我用来读取 Kudu 表的代码

val kuduMasteraddresses = KUDU_MASTER_ADDRESSES_HERE
val kuduMasters: String = Seq(kuduMasteraddresses).mkString(",")

val kuduContext = new KuduContext(kuduMasters,spark.sparkContext)

val table = TABLE_NAME_HERE

def readKudu(table: String) = {
    val tableKuduOptions: Map[String,String] = Map(
    "kudu.table"  -> table,"kudu.master" -> kuduMasters
    )
    spark.sqlContext.read.options(tableKuduOptions).kudu
}

val kuduTableDF = readKudu(table)

使用 kuduContext.tableExists(table) 返回 true。 使用 kuduTableDF.columns 会给出一个带有正确列名的 String 数组。

当我尝试应用计数、显示等操作时出现问题......当前异常被抛出:

名称:org.apache.spark.SparkException 消息:作业因以下原因中止 阶段失败:获取任务结果时出现异常: java.io.IOException: java.lang.classNotFoundException: org.apache.kudu.spark.kudu.KuduContext$TimestampAccumulator 堆栈跟踪:在 org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndindependentStages(DAGScheduler.scala:1567) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1555) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1554) 在 scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 在 scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) 在 org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1554) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:803) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:803) 在 scala.Option.foreach(Option.scala:257) 在 org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:803) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1782) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1737) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1726) 在 org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)
在 org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:619) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:2031) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:2052) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:2071) 在 org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:336) 在 org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38) 在 org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collectFromPlan(Dataset.scala:2865) 在 org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2154) 在 org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2154) 在 org.apache.spark.sql.Dataset$$anonfun$55.apply(Dataset.scala:2846) 在 org.apache.spark.sql.execution.sqlExecution$.withNewExecutionId(sqlExecution.scala:65) 在 org.apache.spark.sql.Dataset.withAction(Dataset.scala:2845) 在 org.apache.spark.sql.Dataset.head(Dataset.scala:2154) 在 org.apache.spark.sql.Dataset.take(Dataset.scala:2367) 在 org.apache.spark.sql.Dataset.showString(Dataset.scala:241) 在 org.apache.spark.sql.Dataset.show(Dataset.scala:641) 在 org.apache.spark.sql.Dataset.show(Dataset.scala:600) 在 org.apache.spark.sql.Dataset.show(Dataset.scala:609)

我已经在 Apache Toree notebook 中使用了 AddDeps 魔法,如下所示:

%AddDeps org.apache.kudu kudu-spark2_2.11 1.6.0 --transitive --trace
%AddDeps org.apache.kudu kudu-client 1.6.0 --transitive --trace

我在执行以下导入时没有问题:

import org.apache.kudu.spark.kudu._

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。