在spark上读取非常大的xml文件数据集

时间:2017-01-16 16:29:22

标签: xml apache-spark pyspark rdd

我想在spark上读取超过180.000 xmls并在每个上启动解析过程,以便最终我将csv文件作为表格。 这些xmls在bz2文件中压缩。 知道我有这个bz2的2个版本: 一个包含连接的xmls(每个30mb)和一个单独的xmls。 问题是,当使用

读取单个xmls版本时,我得到执行程序丢失错误

sc.newAPIHadoopFile(path, "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", "org.apache.hadoop.io.LongWritable", "org.apache.hadoop.io.Text", conf={"textinputformat.record.delimiter": '\n\n'}).map(lambda num_line: num_line[1])

java.io.IOException: Too many bytes before newline在与

一起进行重击时
sc.textFile(hdfs_input_path).persist(pyspark.StorageLevel.MEMORY_AND_DISK)

使用以下代码读取连接的xml版本

sc.newAPIHadoopFile(path, "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", "org.apache.hadoop.io.LongWritable", "org.apache.hadoop.io.Text", conf={"textinputformat.record.delimiter": '</delimiter>'}).map(lambda num_line: num_line[1])

它有时只在xml文件的数量不是180.000的近似值时才有效。

所以我的问题是如何用bz2压缩文件格式实现上述任务?是否有其他格式可以工作?(Gzip不可分割......) 让我们忘记用bz2压缩,还有另一种方法吗?

Iam使用CDH 5.7.0,物理内存为283.20 GB,42个VCores和6个活动节点

0 个答案:

没有答案