Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Scala RDD将每个子字符串映射到另一个RDD_Scala_Apache Spark_Mapping_Aggregate_Rdd - Fatal编程技术网

Scala RDD将每个子字符串映射到另一个RDD

Scala RDD将每个子字符串映射到另一个RDD,scala,apache-spark,mapping,aggregate,rdd,Scala,Apache Spark,Mapping,Aggregate,Rdd,我不太熟悉函数式编程。我想做的是获取字符串的RDD,将它们拆分,然后将每个单词作为条目映射到另一个RDD。我的RDD包含以制表符分隔的字符串 我将要拆分的子字符串作为一个完整的字符串映射到另一个RDD中。然后我将字符串收集到主节点,最后我将要映射到另一个RDD的每个单词拆分。作为一种暴力手段,我已经做到了: var e1String = "" val e1HashTagTemp = entitySetE1.map{ x=> var containedEnt

我不太熟悉函数式编程。我想做的是获取字符串的RDD,将它们拆分,然后将每个单词作为条目映射到另一个RDD。我的RDD包含以制表符分隔的字符串

我将要拆分的子字符串作为一个完整的字符串映射到另一个RDD中。然后我将字符串收集到主节点,最后我将要映射到另一个RDD的每个单词拆分。作为一种暴力手段,我已经做到了:

var e1String = ""

val e1HashTagTemp = entitySetE1.map{ x=>
      var containedEntities = ""
      val entityString = x.split("\t")(2).split(" ")
      entityString.foreach(word => containedEntities += word.toLowerCase + " ")
      containedEntities
    } 

e1HashTagTemp.collect().foreach(x=> e1String += x)
val e1HashTags = sc.parallelize(e1String.split(" ")).distinct
我很确定这不是这种情况下的最佳解决方案

示例

[RDD]entitySetE1=[“test0\t test1\t这是我要映射的字段\t test3\t “test4”,“test0\t test1\t再次映射此\t test3\t test4”]

[RDD]e1HashTagTemp=[“这是我要映射的字段”,“再次映射此字段”]

[String]e1String=“这是我要再次映射的字段”

[RDD]e1HashTags=[“this”、“is”、“the”、“field”、“i”、“want”、“to”、“map”、“reach”]


像下面这样的东西会(几乎)得到你想要的

val e1HashTagTemp: RDD[String] = entitySetE1.flatMap(s => s.split("\t")).flatMap(t => t.split(" ")).map(u => u.toLowerCase)

如果你真的需要过滤掉那些单词,你可以添加一个
.filterNot(word=>word.contains(“test”))

我对它做了一点修改,以便使用我的条件进行拆分:entityset1.map(s=>s.split(“\t”)(2))。。。好主意,谢谢。