按照主题在spark scala中对rdf数据集进行分区

时间:2017-07-03 14:00:12

标签: scala apache-spark

我是函数式编程语言的新手,我正在尝试学习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需要是迭代器 那我该怎么办?

1 个答案:

答案 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/