gpt4 book ai didi

apache-spark - 使用spark从HDFS读取时如何避免 "Not a file"异常

转载 作者:行者123 更新时间:2023-12-02 08:08:40 25 4
gpt4 key购买 nike

我在初始 EMR 步骤中使用 S3DistCP 将文件树从 S3 复制到 HDFS。 hdfs dfs -ls -R hdfs:///data_dir 显示预期的文件,如下所示:

/data_dir/year=2015/
/data_dir/year=2015/month=01/
/data_dir/year=2015/month=01/day=01/
/data_dir/year=2015/month=01/day=01/data01.12345678
/data_dir/year=2015/month=01/day=01/data02.12345678
/data_dir/year=2015/month=01/day=01/data03.12345678

“目录”被列为零字节文件。

然后我运行一个需要读取这些文件的 Spark 步骤。加载代码如下:

sqlctx.read.json('hdfs:///data_dir, schema=schema)

作业因 java 异常而失败

java.io.IOException: Not a file: hdfs://10.159.123.38:9000/data_dir/year=2015

我(也许天真地)假设 Spark 会递归地下降“目录树”并加载数据文件。如果我指向 S3,它就会成功加载数据。

我是否误解了HDFS?我可以告诉 Spark 忽略零字节文件吗?我可以使用 S3DistCp 来压平树吗?

最佳答案

在当前 Spark 上下文的 Hadoop 配置中,在获取 sql ctx 之前配置 Hadoop InputFormat 的“递归”读取

val hadoopConf = sparkCtx.hadoopConfiguration
hadoopConf.set("mapreduce.input.fileinputformat.input.dir.recursive", "true")

这将给出“不是文件”的解决方案。接下来,读取多个文件:

Hadoop job taking input files from multiple directories

或将文件列表合并为单个数据帧:

Read multiple files from a directory using Spark

关于apache-spark - 使用spark从HDFS读取时如何避免 "Not a file"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com