![](/img/trans.png)
[英]How to write the resulting RDD to a csv file in Spark python
[英]How do I get a subset of a csv file as a Spark RDD
我是 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 行的方式调整范围。
RDD 不是存储在内存中的数据,它是对某些数据进行处理的意图。 当您调用终端操作时,例如“收集”或“减少”,Spark 会处理数据。 Spark 根据您在 RDD 上的操作历史,在幕后进行了一些巧妙的优化,限制了它必须做的工作量。
(通过在 RDD 上调用一些操作而不是调用终端操作来尝试自己。没有任何反应!)
所以你可以做例如(这是Scala但在python中不太相似)
val first10results: Array[Array[String]] = sc.textFile(filePath)
.map(f => f.split(","))
.take(10)
Spark 会知道,因为take(10)
,你只需要前 10 行。 所以它只会从文件中取出 10 行! 简单的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.