我想在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个活动节点