我想了解如何在Spark上比較類型String (java.lang.String)
和Text (org.apache.hadoop.io.Text)
的序列化對象。任何一種類型都應該被用作RDD元素的關鍵。所以我想知道這些類型的對象的方式是否存在差異。這可能在下列情況有關:Spark的比較序列化對象rawcomparator
RDD.saveAsObjectFile
和SparkContext.objectFile
支持節能的RDD作爲序列化對象,並加載它。StorageLevel.MEMORY_AND_DISK_SER
作爲調用RDD.persist()
時提供的存儲級別。
Hadoop提供RawComparator
作爲Java的Comparator
的擴展。它允許比較從流中讀取的對象,而不將其反序列化爲對象。 WritableComparator
爲WritableComparable
類型實現了RawComparator
接口,例如Text
,而String
似乎沒有實現。 [1,p。 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);
}
所以問題是:如何處理Spark與那,p。恩。對於1和2情況下的RDD,當調用reduceByKey()
時,如下面列表中所述? 這兩種類型的對象是否可以進行反序列化,然後才能進行比較?或者有什麼機制像Hadoop上的RawComparator
接口? 我已經在文檔中,在網絡上甚至在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;權威指南。 O'Reilly,Sebastopol,CA.
感謝您的幫助!
你好霍爾登,謝謝你的回覆!這非常有幫助。 –