在dataset#groupbykey中使用set作为键

cetgtptt  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(332)

有没有办法使用 Set 作为钥匙 Dataset#groupByKey ? 看起来,对于集合,spark使用了一个用于数组的编码器。这会导致集合中值的顺序更改结果。
举个例子:

import org.apache.spark.sql._

object Main extends App {

  val spark =
    SparkSession
      .builder
      .appName("spark")
      .master("local")
      .getOrCreate()

  import spark.implicits._

  println {
    List("foo", "bar")
      .toDS()
      .groupByKey {
        case "foo" => Set(1, 2)
        case "bar" => Set(2, 1) // append .toList.sorted.toSet to get expected behavior
      }
      .keys
      .collect
      .mkString("\n")
  }

  spark.close()
}

我希望这能产生一把钥匙, Set(1, 2) . 相反,它产生了两个。编码器看起来像是用于有序集合:

val e: Encoder[Set[Int]] = implicitly[Encoder[Set[Int]]]
println(s"${e}") // class[value[0]: array<int>]

这是虫子吗?是否应该为集合设置编码器?这可行吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题