在spark rawcomparator上比较序列化对象

bqucvtff  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(356)

我试图找出这些类型的序列化对象 String (java.lang.String) 以及 Text (org.apache.hadoop.io.Text) 在spark上进行比较。任何一种类型都应该用作rdd元素的键。所以我想知道在比较这些类型的对象的方式上是否有差异。这可能与以下情况有关: RDD.saveAsObjectFile 以及 SparkContext.objectFile 支持将rdd保存为序列化对象并加载它。 StorageLevel.MEMORY_AND_DISK_SER 作为调用时提供的存储级别 RDD.persist() .
hadoop提供了 RawComparator 作为java的扩展 Comparator . 它允许比较从流中读取的对象,而无需将它们反序列化为对象。 WritableComparator 实现 RawComparator 的接口 WritableComparable 类型,例如 Text ,而对于 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);

}

所以问题是:如何处理这些,p。例如,对于rdd,在1的情况下。第二,什么时候 reduceByKey() 如以下列表所述,是否调用?在比较这两种类型的对象之前,是否要反序列化它们?或者有没有类似的机制 RawComparator hadoop上的接口?我已经在文档、网络甚至spark资源中搜索过了,但是还没有找到答案。

JavaRDD<Tuple2<String,CustomType>> loadedParsedContents = sc.objectFile(pathToObjectFile);
JavaPairRDD<String, CustomType> parsedContents 
    = loadedParsedContents.mapToPair(...);
JavaPairRDD<String, CustomType> reducedContents = parsedContents.reduceByKey(...);
reducedContents.count();

[1] 怀特t(2012)hadoop;权威指南。奥莱利,塞巴斯托Perl,加利福尼亚州。
谢谢你的帮助!

ssgvzors

ssgvzors1#

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

相关问题