簡體   English   中英

使用Scala的io.Text RDD上的正則表達式

[英]Regex on io.Text RDD using scala

我有個問題。 我需要從這樣的文件中提取一些數據:

(3269,
<page>
<title>Anarchism</title>
<ns>0</ns>
<id>12</id>
<revision>...
)
(194712,
<page>
<title>AssistiveTechnology</title>
<ns>0</ns>
<id>23</id>.. 
) etc...

該文件是使用以下命令生成的:

val conf = new Configuration
conf.set("textinputformat.record.delimiter", "</page>")
val rdd=sc.newAPIHadoopFile("sample.bz2", classOf[TextInputFormat], classOf[LongWritable], classOf[Text], conf)
rdd.map{case (k,v) => (k.get(), new String(v.copyBytes()))}

我需要獲取標題內容。 我正在使用正則表達式,但是輸出文件仍然為空。 我的代碼是這樣的:

val xx = rdd.map(x => x._2).filter(x => x.matches(".*<title>([A-Za-z]+)<\\/title>.*"))

我也嘗試以下方法:

".*<title>([A-Za-z]+)</title>.*"

並使用這個:

val reg = ".*<title>([\\w]+)</title>.*".r
val xx = rdd.map(x => x._2).filter(x => reg.pattern.matcher(x).matches)

我使用sbt創建.jar並使用spark-submit運行。

順便說一句,使用spark-shell它起作用:S

我需要你的幫助。 謝謝。

您可以使用內置的Scala對XML的支持。 就像是

導入scala.xml._
rdd.map(x =>(XML.loadString(x._2)\\“ title”)。text)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM