如何使用 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 行?的主要内容,如果未能解决你的问题,请参考以下文章