Spark DataFrame删除第一行

6

我在我的Spark/Scala代码中有一个类型为DataFrame的变量rawData

我想要删除第一个元素,类似于这样:

rawData.drop(1)

然而,drop函数不可用。

最简单的方法是删除第一个元素?


1
你怎么知道哪个是第一个?RDD在节点之间分布。 - Nikita
因为我假设每个“行”都有一个“id”。在我的情况下,我从一个“csv”文件中读取数据,因此我假设该文件的第一行将成为具有最小“id”的“Row”。 - bsky
1
这个跟你的非常接近:https://dev59.com/VV4c5IYBdhLWcg3wgqc8 - Nikita
1
不是的。那个问题涉及到RDD,而我有一个DataFrame - bsky
1个回答

5
为了回答这个问题,首先必须澄清DataFrame的第一个元素到底是什么,因为我们不是在讨论放置在单台机器上的有序集合,而是在处理没有特定分区顺序的分布式集合,所以答案并不明显。
如果您想从每个分区删除第一个元素,可以使用以下方法:
df.mapPartitions(iterator => iterator.drop(1))

如果你想从第一个分区中删除第一个元素,可以使用以下方法:

val rdd = df.rdd.mapPartitionsWithIndex{
  case (index, iterator) => if(index==0) iterator.drop(1) else iterator
}
sqlContext.createDataFrame(rdd, df.schema)

这两种解决方案都不太优雅,看起来像是不良的实践。了解完整的用例会很有趣,也许会有更好的方法。


我的 DataFrame 是由 CSV 文件创建的。当 DataFrame 形成时,是否会自动生成一个 id 字段以进行默认排序? - bsky
我不知道有这样的事情。 - Michael Kopaniov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接