为什么在联合数据集集合时存在类型不匹配

时间:2017-12-05 20:41:48

标签: scala apache-spark

我试图获得union的{​​{1}}。

所以我写了以下代码:

ArrayBuffer[Dataset[_]]

我收到以下错误:

var buffer: ArrayBuffer[Dataset[_]] = ArrayBuffer.empty[Dataset[_]]

var size:Long = 0 
...

if size < 1000 {
  buffer.append(df)
  size = size + df.count()
} else {
  val unionedDataset = buffer.reduce(_ union _)
}

匿名函数中第二个参数的类型是否应该与引用的索引处的对象类型相同?

3 个答案:

答案 0 :(得分:0)

ArrayBuffer[Dataset[_]]可以包含例如同时Dataset[String]Dataset[Int],并且没有为它们定义union

如果您有ArrayBuffer[Dataset[T]] forSome { type T },则可以写buffer.reduce(_ union _),但buffer.append(df)无法使用:df必须有Dataset[T]类型,但您不能知道T是什么。

答案 1 :(得分:0)

您可以使用Any代替_,这也应该有效:

var buffer: ArrayBuffer[Dataset[Any]] = ArrayBuffer.empty[Dataset[Any]]

var size:Long = 0 
...

if size < 1000 {
  buffer.append(df.asInstanceOf[Dataset[Any]])
  size = size + df.count()
} else {
  val unionedDataset = buffer.reduce(_ union _)
}

答案 2 :(得分:0)

我发现通过执行以下操作可以避免此问题:

val unionedDataset = buffer.reduce(_.toDF() union _.toDF())