我是Spark的新手,我很惊讶有些结果没有重新计算,虽然我没有(至少我不想)缓存它们,即我必须重新启动sbt以查看更新的值。
以下是相关的代码片段:
val df: DataFrame = sqlContext.read.format("jdbc").options(
Map(
"url" -> "jdbc:postgresql://dbHost:5432/tests?user=simon&password=password",
"dbtable" -> "events")
).load()
val cached = df.cache()
val tariffs = cached.map(row => row.getAs[Int](2))
如果我打印tariffs.toDF().mean()
我得到了正确的平均值,但如果我将代码更改为:
val tariffs = cached.map(row => 0)
在重新启动sbt之前,我没有看到新的平均值(0)
。如何避免这种行为?
答案 0 :(得分:1)
我无法看到您的整个代码,因此我无法确定地回答,但是,如果以下代码生成相同的输出,您应该在https://issues.apache.org/jira/browse/spark
提交错误报告println(cached.map(row => row.getInt(2)).toDF().mean().collect(0))
println(cached.map(row => 0).toDF().mean().collect(0))
但是,如果它们产生不同的输出,则很可能是您的REPL会话出现问题。
更一般地说,要消除缓存的影响,请使用
cached.unpersist()