Skip/Take with Spark SQL



如何使用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

相关内容

  • 没有找到相关文章

最新更新