Scala:如何获取数据帧中的一系列行

时间:2016-09-02 03:49:43

标签: scala apache-spark dataframe

我通过运行Parquet文件的DataFrame创建了sqlContext.read

DataFrame由300 M行组成。我需要使用这些行作为另一个函数的输入,但我希望以较小的批量执行它以防止OOM错误。

目前,我使用df.head(1000000)来读取前1M行,但我找不到一种方法来读取后续行。我试过df.collect(),但它给了我一个Java OOM错误。

我想迭代这个数据帧。我尝试使用withColumn()API添加另一个列来生成一组唯一的值来迭代,但数据框中的所有现有列都没有唯一的值。

例如,我尝试了val df = df1.withColumn("newColumn", df1("col") + 1)以及val df = df1.withColumn("newColumn",lit(i+=1)),两者都没有返回一组连续的值。

获取数据帧的前n行然后接下来的n行的任何其他方式,其作用类似SqlContext的范围函数?

1 个答案:

答案 0 :(得分:6)

您可以简单地使用限制和数据集或数据框的api,如下所示

long count = df.count();
int limit = 50;
while(count > 0){
    df1 = df.limit(limit);
    df1.show();            //will print 50, next 50, etc rows
    df = df.except(df1);
    count = count - limit;
}