如何使用 spark 进行 map-reduce 流选择 N 列,文件夹下所有 csv 文件的前 M 行?

Posted

技术标签:

【中文标题】如何使用 spark 进行 map-reduce 流选择 N 列,文件夹下所有 csv 文件的前 M 行?【英文标题】:How to use spark for map-reduce flow to select N columns, top M rows of all csv files under a folder? 【发布时间】:2015-06-12 18:15:59 【问题描述】:

具体来说,假设我们有一个文件夹,其中包含 10k 个制表符分隔的 csv 文件,其属性格式如下(每个 csv 文件大约 10GB):

id  name    address city...
1   Matt    add1    LA...
2   Will    add2    LA...
3   Lucy    add3    SF...
...

我们有一个基于上面“名称”的查找表

name    gender
Matt    M
Lucy    F
...

现在我们有兴趣将每个 csv 文件的前 100,000 行输出为以下格式:

id  name    gender
1   Matt    M
...

我们可以使用 pyspark 来有效地处理这个问题吗?

如何并行处理这 10k 个 csv 文件?

【问题讨论】:

你可能会使用 wholeTextFiles 但是如果你有很大的文件并且你只需要前 1000 行你可以获取文件名的 rdd 并在映射器中从 hdfs 行读取前 1000 行按行。我认为这应该工作得更快。 【参考方案1】:

您可以在 python 中执行此操作以利用文件的第一行 1000:

top1000 = sc.parallelize("YourFile.csv").map(lambda line : line.split("CsvSeparator")).take(1000)

【讨论】:

谢谢@Thomas。这解决了部分问题。如何进行表格查找,并为每一行创建一个新列(示例中为“性别”)?

以上是关于如何使用 spark 进行 map-reduce 流选择 N 列,文件夹下所有 csv 文件的前 M 行?的主要内容,如果未能解决你的问题,请参考以下文章

最近经历的一些大数据(Spark/Hadoop)面试题

Spark的特点

示例 Spark 程序

Kmeans 聚类与火花中的地图减少

map-reduce 是如何工作的……我做对了吗?

map-reduce 如何在 HDFS 与 S3 上工作?