如何使用Spark SQL实现跳取查询(典型的服务器端网格分页)?我搜遍了网络,只能找到非常基本的例子,比如下面这些:https://databricks-training.s3.amazonaws.com/data-exploration-using-spark-sql.html
我没有看到像T-SQL那样的ROW_NUMBER()或OFFSET/FETCH的任何概念。有人知道怎么做吗?
类似:
scala > csc.sql("select * from users skip 10 limit 10").collect()
试试这样:
val rdd = csc.sql("select * from <keyspace>.<table>")
val rdd2 = rdd.view.zipWithIndex()
rdd2.filter(x => { x._2 > 5 && x._2 < 10;}).collect()
rdd2.filter(x => { x._2 > 9 && x._2 < 12;}).collect()
我发现sparksql和dataframe都没有偏移限制。可能分布中的数据是随机分布的,所以限位与偏移量只具有按限位顺序排列的意义。我们可以使用窗口函数来实现它:
1。假设我们想要获得产品,其收入排名从2到5
2。实施
windowSpec = Window.partitionBy().orderBy(df.revenue.asc())
result = df.select(
"product",
"category",
"revenue",
row_number().over(windowSpec).alias("row_number"),
dense_rank().over(windowSpec).alias("rank"))
result.show()
result = result.filter((col("rank") >= start) & (col("rank") <= end))
result.show()
请参考https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html