spark 2.2.0,如果有附加

时间:2018-09-26 09:39:29

标签: scala apache-spark apache-spark-sql

我对这段代码感到困惑,我想知道这是否是火花漏洞。我设法将其缩小到此测试用例:

val path = tempFolder
Seq(1, 2).toDS.write.parquet(path)

val loaded = spark.read.parquet(path).as[Int]
val filtered = loaded.filter(_ < 2)
  .cache() // this line creates the problem. Remove it and filtered.toSet is Set(1)

Seq(-1,-2).toDS.write.mode(SaveMode.Append).parquet(path)

// this should be the correct value
//    filtered.collect.toSet should be(Set(1))

// but instead we get this incorrect value
filtered.collect.toSet should be(Set(-1,-2,1))

因此,如您所见,filtered读取附加的数据。也许有人会说这是可以的,因为spark总是懒惰地使所有事物变得懒惰。但这不是事实,因为filter是加载时的转换,应仅包含[1,2]。同样,如果我删除了.cache(),那么过滤后的确只有[1],这是我认为正确的值,并且与通常希望从spark获得的值成对。

您认为这是一个错误吗?

0 个答案:

没有答案