如何从apache spark框架中读取XML文件?

时间:2013-11-26 18:32:28

标签: xml apache-spark

我确实遇到了一个使用spark进行数据预处理的迷你教程: http://ampcamp.berkeley.edu/big-data-mini-course/featurization.html

但是,这仅讨论了文本文件解析。有没有办法解析spark系统中的xml文件?

5 个答案:

答案 0 :(得分:4)

看起来有人为apache-spark创建了一个xml数据源。

https://github.com/databricks/spark-xml

这支持通过指定标记和推断类型来读取XML文件,例如

SHOW TRIGGERS 

您也可以将其与CREATE TABLE `fallimenti` ( `annoInserimento` int(4) NOT NULL DEFAULT '2015', `pk` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) DEFAULT NULL, `nome` varchar(250) NOT NULL, `nomeNormalizzato` varchar(250) NOT NULL, `indirizzo` varchar(250) DEFAULT NULL, `citta` varchar(250) DEFAULT NULL, `prov` char(2) DEFAULT NULL, `udienza` datetime DEFAULT NULL, `procedimento` varchar(10) DEFAULT NULL, `anno` int(11) DEFAULT NULL, `dichiarazione` date DEFAULT NULL, `tribunale` varchar(250) DEFAULT NULL, `curatore` varchar(250) DEFAULT NULL, `indirizzoCuratore` varchar(250) DEFAULT NULL, `telCuratore` varchar(16) DEFAULT NULL, `giudice` varchar(250) DEFAULT NULL, `piva` varchar(11) DEFAULT NULL, `dataInserimento` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `attivita` varchar(250) DEFAULT NULL, `tipo` varchar(10) CHARACTER SET ascii DEFAULT NULL, `pec` varchar(255) NOT NULL, `testo` text NOT NULL, PRIMARY KEY (`pk`), UNIQUE KEY `id` (`id`,`udienza`), UNIQUE KEY `nomeNormalizzato` (`nomeNormalizzato`,`citta`,`annoInserimento`) ) ENGINE=InnoDB AUTO_INCREMENT=149418 DEFAULT CHARSET=utf8 一起使用,如下所示:

import org.apache.spark.sql.SQLContext

val sqlContext = new SQLContext(sc)
val df = sqlContext.read
    .format("com.databricks.spark.xml")
    .option("rowTag", "book")
    .load("books.xml")

答案 1 :(得分:3)

我自己没有使用它,但方法与你为hadoop做的一样。例如,您可以使用StreamXmlRecordReader并处理xmls。您需要记录阅读器的原因是您希望控制处理的每个元素的记录边界,否则使用的默认值将处理行,因为它使用LineRecordReader。让自己更熟悉hadoop中recordReader的概念会很有帮助。

当然,您必须使用SparkContext的hadoopRDD或hadoopFile方法以及传递InputFormatClass的选项。 Incase java是您的首选语言,存在类似的替代方案。

答案 2 :(得分:1)

另一个选择是Flexter Data Liberator。它是一个完全自动化processing of XML on Spark并将输出生成为Parquet,RDBMS,TSV等表格的工具,它们是数据分析和下游处理的理想数据格式,例如:在数据仓库或商业智能环境中。

答案 3 :(得分:0)

看看这个link

Databrics提供了spark-xml库,用于通过spark处理xml数据。

感谢。

答案 4 :(得分:0)

如果您正在寻找在xml中提取单个子记录,那么您可以使用XmlInputFormat来实现这一点,我已经写了一篇博客 http://baahu.in/spark-read-xml-files-using-xmlinputformat/