Spark和
Scala的新功能.试图对单词计数示例进行排序.
My code is based on this simple example.
我想按键按字母顺序对结果进行排序.如果我将密钥排序添加到RDD:
我想按键按字母顺序对结果进行排序.如果我将密钥排序添加到RDD:
val wordCounts = names.map((_,1)).reduceByKey(_ + _).sortByKey()
然后我得到一个编译错误:
error: No implicit view available from java.io.Serializable => Ordered[java.io.Serializable]. [INFO] val wordCounts = names.map((_,1)).reduceByKey(_ + _).sortByKey()
我不知道缺少隐含视图意味着什么.有人能告诉我如何解决它吗?我正在运行Cloudera 5 Quickstart VM.我认为它捆绑Spark版本0.9.
Scala工作的来源
import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SparkWordCount { def main(args: Array[String]) { val sc = new SparkContext(new SparkConf().setAppName("Spark Count")) val files = sc.textFile(args(0)).map(_.split(",")) def f(x:Array[String]) = { if (x.length > 3) x(3) else Array("NO NAME") } val names = files.map(f) val wordCounts = names.map((_,1)).reduceByKey(_ + _).sortByKey() System.out.println(wordCounts.collect().mkString("\n")) } }
一些(未排序)输出
("INTERNATIONAL EYELETS INC",879) ("SHAQUITA SALLEY",865) ("PAZ DURIGA",791) ("TERESSA ALCARAZ",824) ("MING CHAIX",878) ("JACKSON SHIELDS YEISER",837) ("AUDRY HULLINGER",875) ("GABRIELLE MOLANDS",802) ("TAM TACKER",775) ("HYACINTH VITELA",837)
解决方法
没有隐式视图意味着没有像这样定义的scala函数
implicit def SerializableToOrdered(x :java.io.Serializable) = new Ordered[java.io.Serializable](x) //note this function doesn't work
出现此错误的原因是因为在您的函数中,您将返回两种不同类型的超类型java.io.Serializable(其中一个是String,另一个是Array [String]).另外,由于显而易见的原因,reduceByKey要求密钥为Orderable.像这样解决它
object SparkWordCount { def main(args: Array[String]) { val sc = new SparkContext(new SparkConf().setAppName("Spark Count")) val files = sc.textFile(args(0)).map(_.split(",")) def f(x:Array[String]) = { if (x.length > 3) x(3) else "NO NAME" } val names = files.map(f) val wordCounts = names.map((_,1)).reduceByKey(_ + _).sortByKey() System.out.println(wordCounts.collect().mkString("\n")) } }
现在该函数只返回Strings而不是两种不同的类型