如何解决使用 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 举报,一经查实,本站将立刻删除。