如何从RDD中提取文本?

时间:2018-01-23 05:24:41

标签: scala apache-spark

我正在尝试从书中提取文字。 book.txt中的示例行:

  

作者:然而,玛丽警告她的母亲,她从那时起就没有改变过   她去年夏天工作了   这是温暖的夏天和城市   充满游客......

以下是我的代码:

val bookRDD = sc.textFile(“file://test/book.txt”);
val sentenceRDD = bookRDD.filter(line => line.contains(“Author:”))

代码抓取包含Author:

的所有第一行
  

作者:然而,玛丽警告她的母亲,自去年夏天工作以来,她没有改变。”

这很好,但我需要抓取Author:后面的文字并排除Author:,所以我有:

  

然而,玛丽警告她的母亲,因为她已经没有改变   去年夏天工作了。

你能帮我写一下代码,在“作者:”之后抓取文字吗?我想在RDD中做这个。

2 个答案:

答案 0 :(得分:3)

过滤后,您可以映射rdd以将字符串Author:替换为空白。 e.g

val bookRDD = sc.textFile(“file://test/book.txt”);
val sentenceRDD = bookRDD.filter(line => line.contains(“Author:”)).map(line => line.replaceFirst("Author: ", ""))

答案 1 :(得分:2)

您可以在此处使用多种字符串操作技术。您可以使用substringreplaceAllsplit(可能)

这是一个replaceAll

rdd.filter( _.startsWith("Author:") )
   .map(_.replaceAll("Author:" , "").trim )
   .first

// String = However, Mary warns her mother that she hasn't changed since she has worked last summer.