根据row_number过滤RDD

纪尧姆

sc.textFile(path)允许读取HDFS文件,但不接受参数(例如,跳过许多行,has_headers等)。

在“学习Spark” O'Reilly电子书中,建议使用以下函数读取CSV(示例5-12。Python加载CSV示例)

import csv
import StringIO

def loadRecord(line):
"""Parse a CSV line"""
input = StringIO.StringIO(line)
reader = csv.DictReader(input, fieldnames=["name", "favouriteAnimal"])
return reader.next()
input = sc.textFile(inputFile).map(loadRecord)

我的问题是关于如何对“所取”的行进行选择性处理:

  1. 如何避免加载第一行(标题)
  2. 如何删除特定的行(例如,第5行)

我在这里看到一些不错的解决方案:选择元素范围,但我想看看是否还有其他更简单的方法。

谢谢!

裂解酶

不必担心加载不需要的行/行。当您这样做时:

input = sc.textFile(inputFile)

您没有加载文件。您只是得到一个对象,该对象将允许您对文件进行操作。因此,要提高效率,最好只考虑获得想要的东西。例如:

header = input.take(1)[0]
rows = input.filter(lambda line: line != header)

请注意,这里我没有使用索引来引用要删除的行,而是引用了它的值。这样做的副作用是,其他具有该值的行也将被忽略,但更具有Spark精神,因为Spark会将文本文件分布在节点的不同部分,而行号的概念在每个分区中都会丢失。这也是为什么在Spark(Hadoop)中不容易做到这一点的原因,因为每个分区都应被视为独立的,并且全局行号会破坏此假设。

如果您确实需要使用行号,我建议您将它们添加到Spark之外的文件中(请参阅此处),然后仅在Spark内部按此列进行过滤。

编辑:添加zipWithIndex了@Daniel Darabos建议的解决方案。

sc.textFile('test.txt')\
  .zipWithIndex()\            # [(u'First', 0), (u'Second', 1), ...
  .filter(lambda x: x[1]!=5)\ # select columns
  .map(lambda x: x[0])\       # [u'First', u'Second'
  .collect()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据row_number()过滤data.frame

来自分类Dev

在sqlalchemy中按row_number过滤

来自分类Dev

在sqlalchemy中按row_number过滤

来自分类Dev

如何获得Spark RDD的等效SQL row_number?

来自分类Dev

在ROW_NUMBER()上进行过滤正在更改结果

来自分类Dev

根据row_number()更新一列

来自分类Dev

Row_Number()根据连续的行进行分区

来自分类Dev

读取row_number

来自分类Dev

ROW_NUMBER 性能

来自分类Dev

SQL row_number() with conditions

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

Row_number() that depends on condition

来自分类Dev

PostgreSQL中的Row_number()

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

ROW_NUMBER(带参数)

来自分类Dev

ROW_NUMBER()SQL错误

来自分类Dev

访问 - row_number 函数?

来自分类Dev

而不是 ROW_NUMBER ORDER BY

来自分类Dev

Row_Number 和分区

来自分类Dev

Row_number 和 union

来自分类Dev

如何在ROW_NUMBER()函数和联合中获取过滤器记录?

来自分类Dev

使用ROW_NUMBER()和where子句获取未过滤表中的行号

来自分类Dev

SQL-SERVER按ROW_NUMBER和其他条件过滤

来自分类Dev

如何使用 row_number() 过滤具有多个连接的重复项?

来自分类Dev

如何在SQL中修改Row_Number语法,以便根据条件分配行号?

来自分类Dev

根据前一行值创建条件 ROW_NUMBER() 分区子句

来自分类Dev

如何根据值列表过滤RDD

来自分类Dev

如何根据给定分区过滤RDD?

来自分类Dev

使用日期索引优化ROW_NUMBER()