您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Python映射器进行Hadoop流传输的多个输出文件

使用Python映射器进行Hadoop流传输的多个输出文件

您可以执行类似以下的操作,但是它涉及一些Java编译,如果您希望用Python来完成用例,我认为这应该不是问题- 就Python而言,据我所知,这不可能直接实现根据您的用例要求在单个作业中从最终输出中跳过文件名。但是,下面显示内容可以轻松实现!

这是需要编译的java类-

package com.custom;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat;

 public class CustomMultIoUtputFormat extends MultipleTextOutputFormat<Text, Text> {
        /**
        * Use they key as part of the path for the final output file.
        */
       @Override
       protected String generateFileNameForKeyValue(Text key, Text value, String leaf) {
             return new Path(key.toString(), leaf).toString();
       }

       /**
        * We discard the key as per your requirement
        */
       @Override
       protected Text generateActualKey(Text key, Text value) {
             return null;
       }
 }

$JAVA_HOME/bin/javac -cp $(hadoop classpath) -d . CustomMultIoUtputFormat.java

尝试执行上述命令之前,请确保将JAVA_HOME设置为/ path / to / your / SUNJDK。

使用(精确键入)制作您的custom.jar文件-

$JAVA_HOME/bin/jar cvf custom.jar com/custom/CustomMultIoUtputFormat.class

hadoop jar /path/to/your/hadoop-streaming-*.jar -libjars custom.jar -outputformat com.custom.CustomMultIoUtputFormat -file your_script.py -input inputpath --numReduceTasks 0 -output outputpath -mapper your_script.py

完成这些操作后,您应该在 看到两个目录,一个目录带有 ,另一个目录具有 。所有具有有效文件名作为标记的记录都将进入valid_file_name目录,而所有具有err_file_name的记录将进入err_file_name目录。

我希望所有这些都是有道理的。

python 2022/1/1 18:42:44 有292人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶