Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在spark scala中按主题划分rdf数据集_Scala_Apache Spark - Fatal编程技术网

在spark scala中按主题划分rdf数据集

在spark scala中按主题划分rdf数据集,scala,apache-spark,Scala,Apache Spark,我是函数式编程语言的新手,我正在努力学习spark scala 目标是按主题划分rdf数据集 代码如下: object SimpleApp { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf(). setAppName("SimpleApp"). setMaster("local[2]"). set("spark.e

我是函数式编程语言的新手,我正在努力学习spark scala 目标是按主题划分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需要是迭代器
那么我该如何继续呢?

按主题对RDD进行分区可能最好使用HashPartitioner。HashPartitioner的工作原理是获取N元组的RDD,并按键eg对数据进行排序

没药:

("sub1", "desc1")
("sub2", "desc2")
("sub1", "desc3")
("sub2", "desc4")

myPairRDD.partitionBy(new HashPartitioner(2))
变成:

分区1:

("sub1", "desc1")
("sub1", "desc3")
分区2:

("sub2", "desc2")
("sub2", "desc4")
因此,您的
subject
srdd可能应该这样创建(注意创建元组/对RDD的额外括号):


有关更多信息,请参见此处的图表:

能否添加输入文件及其生成的输出的示例?我的输入文件是一个Ntriples格式的rdf数据集:对于每一行,我们都有主题,对象和谓词及其生成的输出:HashPartitioner无法对数组键进行分区。如果解决了问题,请将答案标记为正确
val subjectTuples = data.map((_.split("\\s+")(0), _.split("\\s+")(1)))