【发布时间】:2015-12-10 12:24:17
【问题描述】:
我有一个数据框被查询为
val df1 = sqlContext.sql("select * from table1 limit 1")
df1.cache()
df1.take(1)
scala> Array[org.apache.spark.sql.Row] = Array([10,20151100-0000,B95A,293759,0,7698141.001,8141-11,GOOD,22.01,number,2015-10-07 11:34:37.492])
但是,如果我继续
val df2 = df1.rdd
df2.take(1)
scala> Array[org.apache.spark.sql.Row] = Array([10,20151100-0000,B95A,293759,0,7685751.001,5751-05,GOOD,0.0,number,2015-10-03 13:19:22.631])
即使我尝试缓存 df1,这两个结果也完全不同。有没有办法使结果一致,即。 df2 不会再次重新查询表以获取值吗?谢谢。
【问题讨论】:
-
没有订单关系
-
对我来说它给出了相同的结果。你是否按照相同的顺序运行?由于您的查询有限制 1 条件,它不应该为 df2.take(1) 提供不同的行
-
您的引擎是否在 df2.take(1) 之后重新查询数据?实际上,是否采取(1)并不重要。我得到了数据帧 df1,并想对其执行不同的操作。例如,第一个操作我想要 df1.rdd.saveAsTextFile(),然后另一个操作我想要执行 df1.select()。但似乎我第一次操作保存的数据与我执行 select() 的数据不同。
标签: caching apache-spark rdd