deltaTable更新引发NoSuchMethodError

时间:2020-01-21 09:10:25

标签: scala apache-spark databricks delta-lake

我开始研究三角洲湖泊,并在尝试更新表格时遇到了此异常。

我正在使用:

采用EMR 5.29

火花2.4.4

Scala版本2.11.12并使用io.delta:delta-core_2.11:0.5.0。

import io.delta.tables._
import org.apache.spark.sql.functions._
import spark.implicits._

val deltaTable = DeltaTable.forPath(spark, "s3://path/")

deltaTable.update(col("col1") === "val1", Map("col2" -> lit("val2")));

java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Lorg/apache/spark/sql/catalyst/plans/logical/LogicalPlan;)Lorg/apache/spark/sql/catalyst/plans/logical/LogicalPlan;
  at org.apache.spark.sql.delta.util.AnalysisHelper$class.tryResolveReferences(AnalysisHelper.scala:33)
  at io.delta.tables.DeltaTable.tryResolveReferences(DeltaTable.scala:42)
  at io.delta.tables.execution.DeltaTableOperations$$anonfun$5.apply(DeltaTableOperations.scala:93)
  at io.delta.tables.execution.DeltaTableOperations$$anonfun$5.apply(DeltaTableOperations.scala:93)
  at org.apache.spark.sql.catalyst.plans.logical.UpdateTable$$anonfun$1.apply(UpdateTable.scala:57)
  at org.apache.spark.sql.catalyst.plans.logical.UpdateTable$$anonfun$1.apply(UpdateTable.scala:52)
  at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
  at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
  at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
  at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
  at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
  at scala.collection.AbstractTraversable.map(Traversable.scala:104)
  at org.apache.spark.sql.catalyst.plans.logical.UpdateTable$.resolveReferences(UpdateTable.scala:52)
  at io.delta.tables.execution.DeltaTableOperations$class.executeUpdate(DeltaTableOperations.scala:93)
  at io.delta.tables.DeltaTable.executeUpdate(DeltaTable.scala:42)
  at io.delta.tables.DeltaTable.updateExpr(DeltaTable.scala:361)
  ... 51 elided

知道为什么吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

很抱歉给您带来不便,但这是与emr-5.29.0捆绑在一起的Spark版本的一个错误。该问题将在emr-5.30.0中修复,但与此同时,您可以使用不包含此错误的emr-5.28.0。

答案 1 :(得分:0)

这通常是因为您使用的是不兼容的Spark版本。您可以打印setState来检查您的Spark版本。