【发布时间】:2018-04-28 07:10:35
【问题描述】:
我们必须编写一个 SparkSQL 查询来获取特定值的上一行和下一行。 假设我们在 Cassandra 中的表结构如下所示
id, timestamp
1, 100
2,200
3,300
4,400
现在我必须编写一个 Spark Query 以仅获取两行,在这两行中,第一行的值应小于 300,即 (2,200),第二行的值应大于 300,即 (4,400 )。而且由于数据量大,我不想按操作执行顺序。在数据量大的情况下,按操作排序会很慢。 我们可以理解这样的要求,假设我想要两个从时间戳值为的表中获取前一行和下一行: - 对于第一行:应该小于 300 所以预期的行是 (2, 200) 对于第二行:应该大于 300 所以预期的行是 (4, 400) 输出应该如下所示
2,200
4,400
但这应该不按操作顺序执行。
【问题讨论】:
-
“上一个”和“下一个”是什么意思?是基于
id上的订单还是timestamp上的订单?还是基于 DF 中的当前记录顺序(可能无法预测)? -
行按时间戳字段升序排列。
-
我想得到:1,时间戳值小于 300 的一行,所以在输出结果中它应该返回 (2, 200) 2。另一行时间戳值更大大于 300,所以在输出中它应该返回 (4, 400) 这应该在没有操作顺序的情况下完成。因为 cassandra 表中的数据量太大。所以我们不能按操作执行订单。
标签: apache-spark cassandra apache-spark-sql