【问题标题】:How to read some specific files from a collection of files as one RDD如何从文件集合中读取某些特定文件作为一个 RDD
【发布时间】:2015-07-23 20:58:56
【问题描述】:

我在一个目录中有一组文件,我想从这些文件中读取一些特定文件作为一个 RDD,例如:

2000.txt
2001.txt
2002.txt
2003.txt
2004.txt
2005.txt
2006.txt
2007.txt
2008.txt
2009.txt
2010.txt
2011.txt
2012.txt

我想从这些文件中读取每个特定范围,例如:

range = 4
from = 2004

then read files : 2004.txt , 2005.txt , 2006.txt , 2007.txt
as one RDD (data)

如何在 spark scala 中做到这一点?

【问题讨论】:

  • 先生成一个文件名序列,然后在上面调用sc.parallelize和map或者flatMap用读取文件内容的方法?这当然假设文件对所有 spark slave 可见。
  • @AHAD 这些文件存储在哪里?本地文件系统,HDFS,还有什么?文件的最大大小是多少?
  • 这些文件在本地文件系统上,我想在节点集群上运行代码。
  • 还有一些对路径“gloms”(通配符表达式)的支持,例如,sparkContext.textFile("/path/to/200[89]*") 获取 2008 年和 2009 年的数据。
  • @AHAD 如果文件存储在本地,则必须将它们复制到 HDFS 或从所有 spark 节点映射的 nfs 目录。当然,如果您只是在玩本地实例,这将不是问题。

标签: file scala apache-spark


【解决方案1】:

由于Spark的textFile暴露了Hadoop的FileInputFormat,你可以指定varargs的目录和通配符。因此这应该有效(未经测试):

def datedRange(fromYear: Int, years: Int) = 
  sc.textFile(Seq.tabulate(years)(x => fromYear + x).map(y => s"/path/to/dir/$y"): _*)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多