首页 > 解决方案 > 在 spark scala 数据帧中迭代时,如何存储指向“从上次中断的地方继续”的指针?

问题描述

假设我有一些正在读取的数据框,并且每次我想根据排序列显示前 2 行。下次我读入那个数据框时,我不想从头开始,而是显示我上次离开的下两行。我在想我需要创建一些二进制指针列来告诉它在哪里开始/停止,当它到达末尾时它应该回到开头。这是一个例子:

  var df = Seq(("Mike",1),("Kevin",2),("Bob",3),("Steve",4),("Dave",5),("Dustin",6),("Melvin",7),("Henry",8)).toDF("name","score")

在此处输入图像描述

在第一次运行时,输出应该是前两行 Mike 和 Kevin:

在此处输入图像描述

在第二次运行时,输出应该是接下来的两行,

在此处输入图像描述

等等等等。

我将如何动态地执行此操作,以便在我读取 CSV 时它可以自动找出要显示的内容?认为我必须初始化一个“指针”列,然后以某种方式循环遍历它并每次用新的指针位置覆盖现有文件。你会怎么做呢?

我从这段代码开始,但理想情况下我需要在初始化时在第一行有一个 1 而不是全零

df.withColumn("pointer",lit(0)).show

标签: scalaapache-spark

解决方案


如果您在每次读取后将数据帧保存为 CSV 并发出前 2 行,那么您可以在其中添加一个鉴别器列(我相信您在这个意义上使用了指针)并将其保存在数据帧中(最终也保存在 CSV 中)。当您将 CSV 读回数据框时,您可以过滤设置了此标志的行。这将帮助您摆脱已经输出的那些行。


推荐阅读