【问题标题】:read files recursively from sub directories with spark from s3 or local filesystem使用来自 s3 或本地文件系统的 spark 从子目录递归读取文件
【发布时间】:2015-01-13 02:40:41
【问题描述】:

我正在尝试从包含许多子目录的目录中读取文件。数据在 S3 中,我正在尝试这样做:

val rdd =sc.newAPIHadoopFile(data_loc,
    classOf[org.apache.hadoop.mapreduce.lib.input.TextInputFormat],
    classOf[org.apache.hadoop.mapreduce.lib.input.TextInputFormat],
    classOf[org.apache.hadoop.io.NullWritable])

这似乎不起作用。

感谢帮助

【问题讨论】:

  • 你试过只用textFile("s3n://<root_dir>/*")吗?
  • 是的,我试过了,不行
  • 请发布一个目录如何嵌套的示例。可能有一个涉及简单通配符的解决方案,例如:s3n://bucket/*/*/*
  • 是的,谢谢。 s3n://bucket/root_dir/*/*/* 表示年、月、日。但是这样的工作是否有效:s3n://bucket/root_dir/*/data/*/*/* 基本上是每个子目录中的一个目录?

标签: scala hadoop apache-spark


【解决方案1】:

是的,它可以工作,但需要一段时间才能获得单独的块/拆分,基本上每个子目录中都有一个特定的目录: s3n://bucket/root_dir/*/data/*/*/*

【讨论】:

  • 这个答案不清楚:“每个子目录中的特定目录”是什么意思?你的例子也没有表明这一点。谢谢!
  • s3n://bucket/root_dir/*/data/*/*/* 在上面的 url 中,我正在尝试读取 dir 数据。数据的父目录是可变的,所以我使用了“*”。希望对您有所帮助。
  • 听起来和我的用例不同——“给定一个目录 /some/hdfs/dir”:找到它下面的所有文件。结构 /some/hdfs/dir/*/*/*/* ." 不起作用:hdfs -dfs 在它找到的任何目录条目上都返回错误。
  • 这可行,但速度很慢。显然,第一个 * 触发了一个 s3 列表,然后对于每个结果,下一个 * 触发一个列表。在所有列表发生时,实际获取会延迟。是否存在单一递归模式?
【解决方案2】:

好的,试试这个:

hadoop fs -lsr
drwxr-xr-x   - venuktangirala supergroup          0 2014-02-11 16:30 /user/venuktangirala/-p
drwxr-xr-x   - venuktangirala supergroup          0 2014-04-15 17:00 /user/venuktangirala/.Trash
drwx------   - venuktangirala supergroup          0 2015-02-11 16:16 /user/venuktangirala/.staging
-rw-rw-rw-   1 venuktangirala supergroup      19823 2013-10-24 14:34 /user/venuktangirala/data
drwxr-xr-x   - venuktangirala supergroup          0 2014-02-12 22:50 /user/venuktangirala/pandora

-lsr递归列出,然后解析不以“d”开头的那些

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2018-02-07
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多