有没有人知道如何在spark sql查询中进行分页?
我需要使用spark sql,但不知道如何进行分页。
已尝试:
select * from person limit 10, 10
发布于 2016-05-09 16:00:31
如果数据帧中有重复的行,karthik's answer将失败。‘'except’将删除df2中的df1中的所有行。
val filteredRdd = df.rdd.zipWithIndex().collect { case (r, i) if 10 >= start && i <=20 => r }
val newDf = sqlContext.createDataFrame(filteredRdd, df.schema)
发布于 2021-05-11 22:21:49
已经6年了,不知道当时有没有可能
我会在答案上添加一个连续的id,并在偏移量和偏移量+之间搜索寄存器。
在纯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
在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))
即使对于大数据量,它也足够灵活和快速
发布于 2015-11-04 16:08:56
到目前为止,spark sql中不支持偏移量。可以使用的分页方法之一是使用except
方法通过DataFrames
进行分页。
示例:您希望使用分页限制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;
}
如果你想在第一个go中使用LIMIT 50, 100
,你可以这样做:
df1 = df.limit(50);
df2 = df.except(df1);
df2.limit(100); //required result
希望这能有所帮助!
https://stackoverflow.com/questions/29227949
复制相似问题