Skip/Take 与 Spark SQL
Skip/Take with Spark SQL
如何使用 Spark SQL 实现 skip/take 查询(典型的服务器端网格分页)。我已经在网上搜索过了,只能在这里找到非常基本的示例,例如:
https://databricks-training.s3.amazonaws.com/data-exploration-using-spark-sql.html
我没有看到 ROW_NUMBER() 或 OFFSET/FETCH 的任何概念,例如 T-SQL。有谁知道如何做到这一点?
类似于:
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都没有offset限制。可能在分布式数据中是随机分布的,所以limit和offset只对order by limit有意义。我们可以使用window函数来实现它:
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
如何使用 Spark SQL 实现 skip/take 查询(典型的服务器端网格分页)。我已经在网上搜索过了,只能在这里找到非常基本的示例,例如: https://databricks-training.s3.amazonaws.com/data-exploration-using-spark-sql.html
我没有看到 ROW_NUMBER() 或 OFFSET/FETCH 的任何概念,例如 T-SQL。有谁知道如何做到这一点?
类似于:
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都没有offset限制。可能在分布式数据中是随机分布的,所以limit和offset只对order by limit有意义。我们可以使用window函数来实现它:
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