从HDFS序列文件中制作键值对的最佳方法是什么?我之所以要问,我必须对序列文件进行排序。除非您的RDD采用键值对的形式,否则sortByKey方法不可用。我正在使用Apache Spark 1.0.2和HDFS 2.5.0。
答案 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)
希望这会有所帮助。