转换为rdd时,Spark数据帧重新查询

时间:2015-12-10 12:24:17

标签: caching apache-spark rdd

我有一个数据框被查询为

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 个答案:

答案 0 :(得分:0)

take(1)你只是从rdd中取出一个随机值。执行命令时,没有指定订单/排序。由于您有分布式数据集,因此无法确保每次都获得相同的值。

您可以对rdd进行排序/过滤,例如基于键(索引)或架构列。然后,您应该能够始终提取您正在寻找的相同值。