我是Spark的新手。你能用下面的代码告诉我们有什么问题:
val rawData="""USA | E001 | ABC DE | 19850607 | IT | $100
UK | E005 | CHAN CL | 19870512 | OP | $200
USA | E003 | XYZ AB | 19890101 | IT | $250
USA | E002 | XYZ AB | 19890705 | IT | $200"""
val sc = ...
val data= rawData.split("\n")
val rdd= sc.parallelize(data)
val data1=rdd.flatMap(line=> line.split(" | "))
val data2 = data1.map(arr => (arr(2), arr.mkString(""))).sortByKey(false)
data2.saveAsTextFile("./sample_data1_output")
这里,.sortByKey(false)
无效,编译器给我错误:
[error] /home/admin/scala/spark-poc/src/main/scala/SparkApp.scala:26: value sortByKey is not a member of org.apache.spark.rdd.RDD[(String, String)]
[error] val data2 = data1.map(arr => (arr(2), arr.mkString(""))).sortByKey(false)
问题是如何获取MappedRDD?或者我应该在什么对象上调用sortByKey()?
答案 0 :(得分:3)
Spark在对的RDD上提供了其他操作,例如sortByKey()。这些操作可通过名为PairRDDFunctions的类获得,Spark使用隐式转换来自动执行RDD - > PairRDDFunctions包装。
要导入隐式转化,请将以下行添加到程序顶部:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
Spark编程指南的Working with key-value pairs部分对此进行了讨论。