【问题标题】:Drop first row of Spark DataFrame删除 Spark DataFrame 的第一行
【发布时间】:2016-07-12 19:45:31
【问题描述】:

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

我想删除第一个元素,如下所示:

rawData.drop(1)

但是,drop 功能不可用。

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

【问题讨论】:

  • 你怎么知道第一个是什么? RDD 分布在节点之间。
  • 因为我假设每个Row 都有一个id。就我而言,我从csv 文件中读取数据,因此我假设该文件的第一行将成为Row,其中id 最小。
  • 不,不是。这个问题指的是RDD,我有一个DataFrame

标签: scala apache-spark dataframe


【解决方案1】:

要回答这个问题,我们首先必须弄清楚 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字段默认排序?
  • 我不知道
猜你喜欢
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多