[英]Scala RDD String manipulation
我有一個標題為RDD的name
。
scala> name
res6: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[24] at map at <console>:37
我可以使用name.foreach(println)
檢查它
name5000005125651330
name5000005125651331
name5000005125651332
name5000005125651333
我希望創建一個新的RDD, name
從每條記錄的開頭刪除name
字符,並以long
格式返回其余數字。
期望的結果:
5000005125651330
5000005125651331
5000005125651332
5000005125651333
我嘗試了以下方法:
val name_clean = name.filter(_ != "name")
但是,這返回:
name5000005125651330
name5000005125651331
name5000005125651332
name5000005125651333
RDD中的每個條目都是一個字符串。 因此,將其與“名稱”進行比較將始終失敗,因為它是“名稱” +一些數字。
您需要的是map
以遍歷RDD並為每個條目返回一個新值。 並且該新值應該是不帶前4個字符的字符串,並轉換為Long。
放在一起,我們得到
name.map(_.drop(4).toLong)
如果您不知道前四個字符將是“名稱”,則可能需要先檢查一下。 然后,您需要的內容取決於您要對沒有名稱作為前四個名稱的行執行的操作,例如
name.filter(_.startsWith("name")).map(_.drop(4).toLong)
stripPrefix方法將從字符串中刪除給定的前綴(如果字符串不是以該前綴開頭,則不執行任何操作。
因此,您可以通過以下方式實現所需的功能:
val name_clean = name.map(_.stripPrefix("name").toLong)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.