我是函数式编程语言的新手,我正在尝试学习spark scala 目标是按主题划分rdf datset 代码如下:
object SimpleApp {
def main(args: Array[String]): Unit = {
val sparkConf =
new SparkConf().
setAppName("SimpleApp").
setMaster("local[2]").
set("spark.executor.memory", "1g")
val sc = new SparkContext(sparkConf)
val data = sc.textFile("/home/hduser/Bureau/11.txt")
val subject = data.map(_.split("\\s+")(0)).distinct.collect
}
}
所以我得到恢复主题,但它返回一个字符串数组mapPartitions(func)和mapPartitionsWithIndex(func):func需要是迭代器 那我该怎么办?
答案 0 :(得分:0)
按主题划分RDD可能最好通过使用HashPartitioner来完成。 HashPartitioner通过获取N元组的RDD并按键对数据进行排序,例如
myPairRDD:
("sub1", "desc1")
("sub2", "desc2")
("sub1", "desc3")
("sub2", "desc4")
myPairRDD.partitionBy(new HashPartitioner(2))
变为:
分区1:
("sub1", "desc1")
("sub1", "desc3")
分区2:
("sub2", "desc2")
("sub2", "desc4")
因此,您的subject
RDD应该更像这样创建(注意创建元组/对RDD的额外括号):
val subjectTuples = data.map((_.split("\\s+")(0), _.split("\\s+")(1)))
有关详情,请参阅此处的图表:https://blog.knoldus.com/2015/06/19/shufflling-and-repartitioning-of-rdds-in-apache-spark/