有没有一种很好的方法来在Spark中添加单词?

问题描述:

下面是一个例子。有没有一种很好的方法来在Spark中添加单词?

数据集 - dataset.txt

1 banana kiwi orange melon

代码

scala> val table = sc.textFile("dataset.txt").map(_.split(" ")) 

scala> table.take(1) 

res0: Array[Array[String]] = Array(Array(1, banana , kiwi , orange, melon)) 

scala> val pairSet = table.map{case Array(key,b,k,o,m) => (key, b+" "+k+" "+o+" "+m)} 

scala> pairSet.take(1) 

res1: Array[(String, String)] = Array((1, banana kiwi orange melon)) 

我不知道这是否追加在pairSet值的部分是有效的。或者,还有更好的方法?

您可以通过首次出现的空格拆分&创建key & value从中删除。

val table = sc.textFile("dataset.txt").map { x => 
    val splits = x.split(" ",2) 
    (splits(0), splits(1)) 
} 
+0

谢谢您的回复! 是您method'(VAL分裂= x.split( “ ”2) (分割(0),拆分(1)))'比我method'更有效(B +“ ”+ K +“ ”+ O +“” + M)'? –

+0

是的,因为你的情况,你是分裂除了首次出现剩余的字符串不必要只能稍后再添加它们。 – vdep

+0

哦,是的!非常感谢您的建议! –

只有当数组中的数据总是有相同数量时,您的逻辑方法才会有效。你也可以试试这个。

val table = sc.textFile("dataset.txt") 
val pairedDF = table.map{ line => 
         val array = line.split(" ", 2) 
         (array(0), array(1)) 
         } 

通过使用这里面你是不是限制阵列是分裂后的固定大小。

希望这个作品对你罚款。

谢谢

+0

谢谢您的回复! 是您method'(VAL阵列= line.split( “ ”2) (阵列(0),阵列(1)))'比我method'更有效(B +“ ”+ K +“ ”+ O +“” + M)'? –

+0

是因为它[循环]停止分割值它获得的第一个空格之后。 –

+1

哦,是的!非常感谢您的建议! –