2017-10-13 78 views
1

下面是一個例子。有沒有一種很好的方法來在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值的部分是有效的。或者,還有更好的方法?

回答

1

您可以通過首次出現的空格拆分&創建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

哦,是的!非常感謝您的建議! –

1

只有當數組中的數據總是有相同數量時,您的邏輯方法纔會有效。你也可以試試這個。

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

哦,是的!非常感謝您的建議! –

相關問題