我试图获得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 _)
}
匿名函数中第二个参数的类型是否应该与引用的索引处的对象类型相同?
答案 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())