小编Sam*_*ker的帖子

UnresolvedException:使用从Seq.empty构造的DataSet时对未解析对象的dataType调用无效(自Spark 2.3.0起)

以下代码段在Spark 2.2.1中运行正常,但在Spark 2.3.0中给出了一个相当神秘的运行时异常:

import sparkSession.implicits._
import org.apache.spark.sql.functions._

case class X(xid: Long, yid: Int)
case class Y(yid: Int, zid: Long)
case class Z(zid: Long, b: Boolean)

val xs = Seq(X(1L, 10)).toDS()
val ys = Seq(Y(10, 100L)).toDS()
val zs = Seq.empty[Z].toDS()

val j = xs
  .join(ys, "yid")
  .join(zs, Seq("zid"), "left")
  .withColumn("BAM", when('b, "B").otherwise("NB"))

j.show()
Run Code Online (Sandbox Code Playgroud)

在Spark 2.2.1中,它打印到控制台

+---+---+---+----+---+
|zid|yid|xid|   b|BAM|
+---+---+---+----+---+
|100| 10|  1|null| NB|
+---+---+---+----+---+
Run Code Online (Sandbox Code Playgroud)

在Spark 2.3.0中,它导致:

org.apache.spark.sql.catalyst.analysis.UnresolvedException: Invalid call to dataType on unresolved object, tree: 'BAM
  at org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute.dataType(unresolved.scala:105)
  at org.apache.spark.sql.types.StructType$$anonfun$fromAttributes$1.apply(StructType.scala:435)
  at …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

13
推荐指数
1
解决办法
4583
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

scala ×1