0
我是Spark新手,我很惊讶某些结果不会重新计算,尽管我没有(至少我不想) )缓存它们,即我必须重新启动sbt才能看到更新的值。Spark Scala:如何强制Spark重新计算一些结果(不使用缓存)
这里是代码中的相关片段:
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)
我没有看到新平均(0)
,直到我重新启动sbt。如何避免这种行为?
不知道你想达到与'.MAP(行=> 0)'什么。你只需要创建一个新的'RDD',为什么它应该修改任何东西?你如何检查它? –
我不试图做任何事情,它只是表明0的RDD [Int]的平均值不是0,而是之前用实际值计算的平均值(即,tariffs.toDF()。mean()output 17.18而不是0)直到我重新启动sbt。 – Simon
尝试使用'unpersist()'将其从缓存中移除? –