【问题标题】:How to read HDFS sequence file in spark如何在 Spark 中读取 HDFS 序列文件
【发布时间】:2015-12-18 02:17:27
【问题描述】:

我正在尝试将文件从HDFS(在这种情况下为s3)作为RDD 读取到spark 中。该文件位于SequenceInputFileFormat。但我无法将文件的内容解码为字符串。我有以下代码:

package com.spark.example.ExampleSpark;

import java.util.List;
import scala.Tuple2;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.hive.HiveContext;


public class RawEventDump 
{
    public static void main( String[] args )
    {

        SparkConf conf = new SparkConf().setAppName("atlas_raw_events").setMaster("local[2]");
        JavaSparkContext jsc = new JavaSparkContext(conf);

        JavaPairRDD<String, Byte> file = jsc.sequenceFile("s3n://key_id:secret_key@<file>", String.class, Byte.class);
        List<String> values = file.map(
            new Function<Tuple2<String, Byte>, String>() {
            public String call(Tuple2 row) {
                return "Value: " + row._2.toString() + "\n";
            }
        }).collect();
        System.out.println(values);
    }
}

但我得到以下输出:

Value: 7b 22 65 76 65 6e ...
, Value: 7b 22 65 76 65 6e 74 22 3a ...
, Value: 7b 22 65 76 65 6...
...

如何在 spark 中读取文件的内容?

【问题讨论】:

    标签: java hadoop apache-spark hdfs


    【解决方案1】:

    Sequence Files 通常使用 Hadoop 类型,如 TextWritable、BytesWritable、LongWritable 等,因此 RDD 类型应为 JavaPairRDD&lt;LongWritable, BytesWritable&gt;

    然后转字符串你应该调用org.apache.hadoop.io.Text.decode(row._2.getBytes())

    【讨论】:

    • 感谢您的回答。但是在进行相应更改时出现以下错误:the method getBytes() is undefined for the type Object
    • 元组应该使用 ByteWritable 而不是 Byte
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2021-06-18
    • 2017-08-07
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多