Hadoop Spark rawcomparator上序列化对象的比较

Hadoop Spark rawcomparator上序列化对象的比较,hadoop,serialization,apache-spark,Hadoop,Serialization,Apache Spark,我试图找出在Spark上如何比较String(java.lang.String)和Text(org.apache.hadoop.io.Text)类型的序列化对象。这两种类型中的任何一种都应该用作RDD元素的键。因此,我想知道这些类型的对象在比较方式上是否存在差异。这可能与以下情况有关: RDD.saveAsObjectFile和SparkContext.objectFile支持将RDD保存为序列化对象并加载它 StorageLevel.MEMORY_和_DISK_SER作为调用RDD.persi

我试图找出在Spark上如何比较
String(java.lang.String)
Text(org.apache.hadoop.io.Text)
类型的序列化对象。这两种类型中的任何一种都应该用作RDD元素的键。因此,我想知道这些类型的对象在比较方式上是否存在差异。这可能与以下情况有关:

  • RDD.saveAsObjectFile
    SparkContext.objectFile
    支持将RDD保存为序列化对象并加载它

  • StorageLevel.MEMORY_和_DISK_SER
    作为调用
    RDD.persist()时提供的存储级别

  • Hadoop提供了
    RawComparator
    作为Java的
    Comparator
    的扩展。它允许比较从流中读取的对象,而无需将它们反序列化为对象
    WritableComparator
    WritableComparable
    类型(如
    Text
    )实现
    RawComparator
    接口,而
    String
    似乎没有实现。[1,第96页]

    package org.apache.hadoop.io;
    import java.util.Comparator;
    
    public interface RawComparator<T> extends Comparator<T> {
    
    public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2);
    
    }
    
    [1] White T(2012)Hadoop;权威指南。奥雷利,塞瓦斯托波尔,加利福尼亚州


    谢谢你的帮助

    这是一个非常有趣的问题,答案正在改变。一般来说,Spark中的操作是在反序列化对象上完成的,但这在Spark SQL中正在发生变化,因为一些操作现在可以直接在序列化对象上完成。

    您好,Holden,谢谢您的回复!这很有帮助。
    JavaRDD<Tuple2<String,CustomType>> loadedParsedContents = sc.objectFile(pathToObjectFile);
    JavaPairRDD<String, CustomType> parsedContents 
        = loadedParsedContents.mapToPair(...);
    JavaPairRDD<String, CustomType> reducedContents = parsedContents.reduceByKey(...);
    reducedContents.count();