sim*_*yun 10 apache-spark apache-spark-sql
有没有人如何在spark sql查询中进行分页?
我需要使用spark sql但不知道如何进行分页.
尝试:
select * from person limit 10, 10
Run Code Online (Sandbox Code Playgroud)
已经6年了,不知道当时还能不能。
我会在答案上添加一个顺序 ID ,并在offset 和 offset + limit之间搜索寄存器
在纯 Spark SQL 查询中,对于偏移 10 和限制 10,它会是这样的
WITH count_person AS (
SELECT *, monotonically_increasing_id() AS count FROM person)
SELECT * FROM count_person WHERE count > 10 AND count < 20
Run Code Online (Sandbox Code Playgroud)
在 PySpark 上,它会非常相似
import pyspark.sql.functions as F
offset = 10
limit = 10
df = df.withColumn('_id', F.monotonically_increasing_id())
df = df.where(F.col('_id').between(offset, offset + limit))
Run Code Online (Sandbox Code Playgroud)
即使对于大量数据,它也足够灵活和快速。
目前 Spark sql 还不支持 offset。可以用于分页的替代方法之一是通过DataFramesusingexcept方法。
示例:您想要以 10 的分页限制进行迭代,您可以执行以下操作:
DataFrame df1;
long count = df.count();
int limit = 10;
while(count > 0){
df1 = df.limit(limit);
df1.show(); //will print 10, next 10, etc rows
df = df.except(df1);
count = count - limit;
}
Run Code Online (Sandbox Code Playgroud)
如果你想做的话, LIMIT 50, 100首先,你可以执行以下操作:
df1 = df.limit(50);
df2 = df.except(df1);
df2.limit(100); //required result
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4713 次 |
| 最近记录: |