python - 如何获取 csv 文件的子集作为 Spark RDD

标签 python csv apache-spark

我是 Spark 新手,正在尝试读取 csv 文件并获取文件中的第一列和第二列。但问题是 csv 文件很大,我对解析 csv 文件中的每一行不感兴趣。此外,运行collect()函数可能会使进程崩溃,因为内存可能不足以支持返回的数据量。所以我想知道是否可以仅使用 csv 数据的子集创建 RDD。例如,是否可以生成一个包含 csv 文件第 10 到 1000 行的 RDD,而忽略其他行。

现在我只有

csvdata = sc.textFile("hdfs://nn:port/datasets/sample.csv").map(lambda line: line.split(","))

这基本上为整个 csv 文件创建了一个 RDD。是否可以从仅包含第 10 行到第 1000 行的 csvdata 创建 RDD?

非常感谢您提供的帮助。

最佳答案

您可以加载全部并按索引过滤:

rdd = sc.parallelize(range(0, -10000, -1))
rdd.zipWithIndex().filter(lambda kv: 9 <= kv[1] < 999).keys()

根据您定义第 10 行的方式调整范围。

关于python - 如何获取 csv 文件的子集作为 Spark RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991963/

相关文章:

apache-spark - Databricks 无法执行合并,因为多个源行匹配并试图修改增量表中的同一目标行

scala - Spark Structured Streaming 左外连接为已经匹配的行返回外空值

apache-spark - 无法使用 Apache spark 2.1.0 连接到 hive 数据库

Python/Django递归模型到树结构字典中

Python - 获取h264视频文件的最后一帧

带有 Dovecot/SSL 的 Python smtplib

python - 带有中间页面 : not getting info back 的 Django 管理操作

csv - 如何使用 Spacy 检测文本是否是个人、组织或其他实体?

ruby - 导入 CSV 引用错误让我抓狂

java - 如何在 Java 中从 CSVWriter 创建新列