python - 通过Python处理HDFS中的多个文件

标签 python hadoop scripting hdfs

我在 HDFS 中有一个目录,其中包含大约 10,000 个 .xml 文件。我有一个 python 脚本“processxml.py”,它接受一个文件并对其进行一些处理。是否可以对 hdfs 目录中的所有文件运行该脚本,或者我是否需要先将它们复制到本地才能执行此操作?

例如,当我在本地目录中的文件上运行脚本时,我有:

cd /path/to/files

for file in *.xml
do
python  /path/processxml.py 
$file > /path2/$file
done

所以基本上,我将如何做同样的事情,但这次文件位于 hdfs 中?

最佳答案

你基本上有两个选择:

1) 使用hadoop Streaming Connector 创建MapReduce 作业(这里只需要Map 部分)。从 shell 或 shell 脚本内使用此命令:

hadoop jar <the location of the streamlib> \
        -D mapred.job.name=<name for the job> \
        -input /hdfs/input/dir \
        -output /hdfs/output/dir \
        -file your_script.py \
        -mapper python your_script.py \
        -numReduceTasks 0

2) 创建 PIG 脚本并发送您的 Python 代码。以下是该脚本的基本示例:

input_data = LOAD '/hdfs/input/dir';
DEFINE mycommand `python your_script.py` ship('/path/to/your/script.py');
updated_data = STREAM input_data THROUGH mycommand PARALLEL 20;    
STORE updated_data INTO 'hdfs/output/dir';

关于python - 通过Python处理HDFS中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070998/

相关文章:

python - 在 Pandas 中创建 DataFrame(形状错误)

java - 如何解决编译的类版本和运行时版本之间的JDK版本不匹配?

hadoop - 在配置单元配置 : Couldn't create directory ${system:java. io.tmpdir}\${hive.session.id}_resources 上应用授权策略时出错

scala - 何时坚持以及何时取消坚持 Spark 中的 RDD

grails - Grails 3脚本或命令与域类

python - 如何从 Django 中的多对多中间模型中进行选择?

python - Python 变量作用域是如何工作的?

python - 从 python 线程(不是主线程)启动 pyQt 线程有什么不好?

batch-file - 将变量与批处理脚本中数组中的值进行比较

c# - 使用 CodeDomProvider 编译不允许 C# 或 VB 的新功能