在Spark数据集中使用scala.Symbol

时间:2017-05-17 19:30:41

标签: scala apache-spark dataset

如何在Spark scala.Symbol中启用Dataset s的编码?

以下小例子:

import org.apache.spark.sql.SparkSession

object DatasetTest extends App {

  val spark: SparkSession = SparkSession
    .builder()
    .master("local[*]")
    .getOrCreate()

  import spark.implicits._
  case class RowType(symbol: Symbol, string: String)

  val key = Symbol("123")
  val ds1 = Seq(RowType(key, "some data")).toDS
  val ds2 = Seq(RowType(key, "other data")).toDS

  ds1.joinWith(ds2, ds1.col("symbol") === ds2.col("symbol")).show
}

在运行时会失败:

Exception in thread "main" java.lang.UnsupportedOperationException: No Encoder found for Symbol
- field (class: "scala.Symbol", name: "symbol")
- root class: "DatasetTest.RowType"

我所有包含隐式编码器的尝试都失败了。

例如,在使用Kryo时,创建了数据集,但joinWith将无法找到“符号”列。 (使用Kryo时似乎火花不能破坏类型)

任何提示?

请注意,这个问题比How to store custom objects in Dataset?更具体,并期待更具体的答案。

0 个答案:

没有答案