【发布时间】:2016-10-29 18:39:11
【问题描述】:
我是 Spark 新手,有一些关于 Spark RDD 操作和创建的问题:
val rdd1 = sc.parallelize(List("yellow","red","blue","cyan","black"),3)
val mapped = rdd1.mapPartitionsWithIndex{(index, iterator) => {
println("Called in Partition -> " + index)
val myList = iterator.toList
myList.map(x => x + " -> " + index).iterator
}
}
上面代码末尾的.iterator有什么用?它将列表转换为迭代器吗?列表本身不就是一个迭代器吗,我们到底为什么需要这个操作呢?
另外,为什么这比普通的 map() 函数快?由于分区中的每个元素都再次使用map(x => x + " -> " + index) 函数,这难道不是另一种逐个元素工作的方式吗?
另一件事,我想通过一次读取 4 行文件来创建 RDD。我在 Scala 中有以下代码:
val hconf = new org.apache.hadoop.conf.Configuration
hconf.set("mapreduce.input.lineinputformat.linespermap","4")
val line = sc.newAPIHadoopFile(inputFile,classOf[NLineInputFormat],classOf[LongWritable],classOf[Text],hconf).map(_._2.toString)
line.take(1).foreach(println)
但输出仍然只打印一行。由于我已将hconf 设置为读取 4 行,RDD 中的每个元素不应该接收 4 行 inptFile 吗?那么它不应该输出四行吗?
【问题讨论】:
标签: scala apache-spark