2017-12-05 2 views
0

unionArrayBuffer[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 _) 
} 

type mismatch; 
[error] found : org.apache.spark.sql.Dataset[_$2(in value $anonfun)] where type _$2(in value $anonfun) 
[error] required: org.apache.spark.sql.Dataset[_$2(in variable buffer)] 
[error]   val unionedDataset = buffer.reduce(_ union _) 
[error]             ^

は無名関数の第2引数の型が同じタイプのすべきではない

だから私は、次のコードを書きました参照されたインデックスのオブジェクト?

答えて

0

ArrayBuffer[Dataset[_]]は、例えば、 Dataset[String]Dataset[Int]であり、unionは定義されていません。

あなたがArrayBuffer[Dataset[T]] forSome { type T }を持っていた場合、あなたはbuffer.reduce(_ union _)を書くことができますが、その後buffer.append(df)は動作しません:dfはタイプDataset[T]を持っている必要がありますが、あなたはTが何であるかを知りません。あなたがAnyの代わり_を使用することができ

0

、これも動作するはずです:

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 _) 
} 
0

私は、次の手順を実行して、この問題を回避できることを考え出し:

val unionedDataset = buffer.reduce(_.toDF() union _.toDF()) 
関連する問題