什么相当于Spark SQL中的OFFSET?

时间:2017-03-04 03:32:19

标签: apache-spark apache-spark-sql spark-dataframe

我使用Spark SQL获得了100行的结果集。我希望得到从第6行到第15行的最终结果。在SQL中,我们使用OFFSET来跳过像OFFSET 5 LIMIT 10这样的行,用于获取从6到15的行。在Spark SQL中,我该怎么办?实现同样的目标?

1 个答案:

答案 0 :(得分:1)

我猜SparkSQL不支持 offset 。所以我使用 id 作为过滤条件。每次,我只检索 N 数据。

以下是我的示例代码:

sc = SparkContext()  
sqlContext = SQLContext(sc)

df = sqlContext.read.format('com.databricks.spark.csv')\
        .options(header='false', inferschema='true')\
        .load('your.csv')
sqlContext.registerDataFrameAsTable(df, "table")

batch_size = 10 ** 5
res = sqlContext.sql("select min(C0), max(C0) from table).collect()
index = int(res[0]._c0) - 1
N_max = int(res[0]._c1)
while index < N_max:
    prev = index
    sql = "select C0, C1, C2, C3 from table \
            where C0 > '%s' and C0 <= '%s' \
            order by C0 limit %d" % (index, index+batch_size, batch_size)
    res = sqlContext.sql(sql).collect()
    # do something ...

    if index < prev + batch_size:
        index = prev + batch_size