首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现spark sql分页查询

如何实现spark sql分页查询
EN

Stack Overflow用户
提问于 2015-03-24 16:29:40
回答 4查看 8.2K关注 0票数 11

有没有人知道如何在spark sql查询中进行分页?

我需要使用spark sql,但不知道如何进行分页。

已尝试:

代码语言:javascript
运行
复制
select * from person limit 10, 10
EN

回答 4

Stack Overflow用户

发布于 2016-05-09 16:00:31

如果数据帧中有重复的行,karthik's answer将失败。‘'except’将删除df2中的df1中的所有行。

代码语言:javascript
运行
复制
val filteredRdd = df.rdd.zipWithIndex().collect { case (r, i) if 10 >= start && i <=20 => r }
val newDf = sqlContext.createDataFrame(filteredRdd, df.schema)
票数 3
EN

Stack Overflow用户

发布于 2021-05-11 22:21:49

已经6年了,不知道当时有没有可能

我会在答案上添加一个连续的id,并在偏移量和偏移量+之间搜索寄存器。

在纯spark sql查询中,偏移量为10,限制为10,如下所示

代码语言:javascript
运行
复制
WITH count_person AS (
    SELECT *, monotonically_increasing_id() AS count FROM person)
SELECT * FROM count_person WHERE count > 10 AND count < 20

在Pyspark上,它将非常类似

代码语言:javascript
运行
复制
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))

即使对于大数据量,它也足够灵活和快速

票数 3
EN

Stack Overflow用户

发布于 2015-11-04 16:08:56

到目前为止,spark sql中不支持偏移量。可以使用的分页方法之一是使用except方法通过DataFrames进行分页。

示例:您希望使用分页限制10进行迭代,可以执行以下操作:

代码语言:javascript
运行
复制
    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,你可以这样做:

代码语言:javascript
运行
复制
        df1 = df.limit(50);
        df2 = df.except(df1);
        df2.limit(100);       //required result

希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29227949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档