2017-07-03 68 views
0

我是一個新手,函數式編程語言,我努力學習火花斯卡拉 的目標是按主題劃分的RDF datset 的代碼如下:按主題火花階Partitionning的RDF數據集

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

你能添加您的輸入文件的樣本和它生成的輸出? – jsdeveloper

+0

我的輸入文件是Ntriples格式的rdf數據集:對於每行我們都有主題,對象和謂詞以及它生成的輸出:HashPartitioner無法對數組鍵進行分區。 – Marry

+0

如果解決了您的問題,請將答案標記爲正確 – jsdeveloper

回答

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/