分享

Spark 高级分析:第六章第2,3节 解析和准备数据

feilong 2018-5-26 07:55:09 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 4797
问题导读

1.从哪里获取数据?得到数据后存储在哪里?
2.文章中如何将XML转换成纯文本?
3
.XmlInputFormat是什么?






上一篇:Spark 高级分析:第六章第1节 词语文档矩阵
http://www.aboutyun.com/forum.php?mod=viewthread&tid=24525&extra=


获取数据

维基百科对所有可用的文章进行转储。完整的转储文件包含在一个大的XML文件中。这些可以从http://dumps.wikimedia.org/enwiki下载然后放在HDFS。例如:
[mw_shl_code=bash,true]$ wget http://dumps.wikimedia.org/enwik ... multistream.xml.bz2
$ bzip2 -d enwiki-20140304-pages-articles-multistream.xml.bz2
$ hadoop fs -put enwiki-20140304-pages-articles-multistream.xml /user/ds[/mw_shl_code]
这会花费一些时间。

下面是转储开始处的片段:
[mw_shl_code=xml,true]<page>
<title>Anarchism</title>
<ns>0</ns>
<id>12</id>
<revision>
<id>584215651</id>
<parentid>584213644</parentid>
<timestamp>2013-12-02T15:14:01Z</timestamp>
<contributor>
<username>AnomieBOT</username>
<id>7611264</id>
</contributor>
<comment>Rescuing orphaned refs ("autogenerated1" from rev 584155010; "bbc" <text xml:space="preserve">{{Redirect|Anarchist|the fictional character|Anarchist (comics)}}
{{Redirect|Anarchists}}
{{pp-move-indef}}
{{Anarchism sidebar}}[/mw_shl_code]
'''Anarchism''' is a [[political philosophy]] that advocates [[stateless society|stateless societies]] ...
让我们启动Spark Shell。在本章中,我们依赖几个库来简化我们的生活。GitHub repo包含一个Maven项目,它可以用来构建一个jar文件,将所有这些依赖项打包在一起。
[mw_shl_code=shell,true]$ cd lsa/
$ mvn package
$ spark-shell --jars target/lsa-1.0.0.jar[/mw_shl_code]
我们提供了一个来自Apache Mahout项目的类XmlInputFormat,它可以将大量的Wikipedia转储文件分解成文档。用它来创建一个RDD:
[mw_shl_code=scala,true]import com.cloudera.datascience.common.XmlInputFormat
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.io._
val path = "hdfs:///user/ds/enwiki-20140304-pages-articles-multistream.xml"
val conf = new Configuration()
conf.set(XmlInputFormat.START_TAG_KEY, "<page>")
conf.set(XmlInputFormat.END_TAG_KEY, "</page>")
val kvs = sc.newAPIHadoopFile(path, classOf[XmlInputFormat],
classOf[LongWritable], classOf[Text], conf)
val rawXmls = kvs.map(p => p._2.toString)[/mw_shl_code]
将Wiki XML转换为文章内容的纯文本可能需要自己的一章,但是,幸运的是,Cloud9项目提供了完全处理这一问题的api:
[mw_shl_code=scala,true]import edu.umd.cloud9.collection.wikipedia.language._
import edu.umd.cloud9.collection.wikipedia._
def wikiXmlToPlainText(xml: String): Option[(String, String)] = {
val page = new EnglishWikipediaPage()
WikipediaPage.readPage(page, xml)
if (page.isEmpty) None
else Some((page.getTitle, page.getContent))
}
val plainText = rawXmls.flatMap(wikiXmlToPlainText)[/mw_shl_code]





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条