【问题标题】:Convert plain text file to Hadoop sequence file in Spark在 Spark 中将纯文本文件转换为 Hadoop 序列文件
【发布时间】:2017-11-23 20:26:30
【问题描述】:

我现有的项目正在使用 Hadoop map-reduce 生成一个序列文件,该文件具有 XML 格式的自定义键和值。

通过从输入源一次读取一行来生成 XML 值,并实现 RecordReader 以从纯文本中返回 XML 格式的下一个值。

例如输入源文件有 3 行(第一行是标题,其余行是实际数据)

id|name|value
1|Vijay|1000
2|Gaurav|2000
3|Ashok|3000

post map方法序列文件有数据如下:

FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>1</id><name>Vijay</name><value>1000</value></bars>
FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>2</id><name>Gaurav</name><value>2000</value></bars>
FeedInstanceKey{feedInstanceId=1000, entity=bars}   <?xml version='1.0' encoding='UTF-8'?><bars><id>3</id><name>Ashok</name><value>3000</value></bars>

问题:我希望在 Spark 中实现相同的功能。基本上就是读取输入文件,生成上面的键值对。

有没有办法/可能重用现有的 InputFormat 以及我的 Hadoop 映射器类中使用的 RecordReader。

RecordReader 负责/具有将纯文本行转换为 XML 并作为值返回给 Hadoop map 方法的逻辑,以便在 context.write() 方法中写入。

请提出建议。

【问题讨论】:

    标签: java xml hadoop apache-spark mapreduce


    【解决方案1】:

    这在 Spark 文档的 External Datasets 部分中进行了介绍。对您来说重要的部分是:

    对于其他 Hadoop 输入格式,您可以使用 JavaSparkContext.hadoopRDD 方法,采用任意 JobConf 以及输入格式类、键类和值类。设置这些相同 使用输入源进行 Hadoop 作业的方式。你也可以 使用基于 JavaSparkContext.newAPIHadoopRDD 的 InputFormats “新” MapReduce API (org.apache.hadoop.mapreduce)。

    这里有一个简单的例子来演示如何使用它:

    public final class ExampleSpark {
    
        public static void main(String[] args) throws Exception {
            JavaSparkContext spark = new JavaSparkContext();
            Configuration jobConf = new Configuration();
    
            JavaPairRDD<LongWritable, Text> inputRDD = spark.newAPIHadoopFile(args[0], TextInputFormat.class, LongWritable.class, Text.class, jobConf);
            System.out.println(inputRDD.count());
    
            spark.stop();
            System.exit(0);
        }
    }
    

    您可以查看 JavaSparkContext here 的 Javadocs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      相关资源
      最近更新 更多