使用Apache Spark从HDFS序列文件中创建键值对

时间:2014-10-02 14:47:37

标签: scala hdfs apache-spark

从HDFS序列文件中制作键值对的最佳方法是什么?我之所以要问,我必须对序列文件进行排序。除非您的RDD采用键值对的形式,否则sortByKey方法不可用。我正在使用Apache Spark 1.0.2和HDFS 2.5.0。

2 个答案:

答案 0 :(得分:5)

来自Spark文档:

  

对于SequenceFiles,使用SparkContext的sequenceFile [K,V]方法   K和V是文件中键和值的类型。这些应该是   Hadoop的Writable接口的子类,如IntWritable和Text。   此外,Spark允许您为一些常见的类型指定本机类型   Writables;例如,sequenceFile [Int,String]将自动执行   阅读IntWritables和文本。

关键是你必须将Hadoop类型映射到[String,Int,...]并构建你想要的(k,v)rdd才能应用sortByKey方法。

val file = sc.sequenceFile(input, classOf[Text], classOf[Text])
val map = file.map{case (k,v) => (k.toString(), v.toString())} 
val sortedOutput = map.sortByKey(true)

答案 1 :(得分:0)

您还可以将签名与本机类型参数一起使用,以便该方法仅需要文件路径。您无需明确地执行额外的步骤即可将其映射到类型化的RDD中。

val file = sc.sequenceFile[Text, Text](file_path)

以上语句将加载数据并将其映射到签名中指定的类型。然后,您可以对其进行排序操作。

sortedData = file.sortByKey(true)

希望这会有所帮助。