阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Spark parquet merge metadata问题

178次阅读
没有评论

共计 1977 个字符,预计需要花费 5 分钟才能阅读完成。

在 spark sql 1.2.x 当中存在一个问题:

当我们尝试在一个查询中访问多个 parquet 文件时,如果这些 parquet 文件中的字段名和类型是完全一致的、只是字段的顺序不一样,例如一个文件中是 name string, id int,另一个文件是 id int, name string 时,查询会报错,抛出 metadata merge 的异常。

在 1.3 当中,这个问题其实已经解决。那么在 1.2.x 中解决的办法是:

在 spark 源码的 sql/core/src/main/scala/org/apache/spark/sql/parquet/ParquetTableOperations.scala 文件中,找到 override def getSplits(configuration: Configuration, footers: JList[Footer]): JList[ParquetInputSplit] 这个方法,在如下这段代码之前:

if (globalMetaData == null) {
    val splits = mutable.ArrayBuffer.empty[ParquetInputSplit]
    return splits
    }

将 val globalMetaData 改成 var globalMetaData

在上面这段代码之后加上如下几行:

val startTime = System.currentTimeMillis();
val metadata = configuration.get(RowWriteSupport.SPARK_ROW_SCHEMA)
val mergedMetadata = globalMetaData.getKeyValueMetaData.updated(RowReadSupport.SPARK_METADATA_KEY, setAsJavaSet(Set(metadata)))
globalMetaData = new GlobalMetaData(globalMetaData.getSchema, mergedMetadata, globalMetaData.getCreatedBy)
val endTime = System.currentTimeMillis();
logInfo(“\n*** updated globalMetadata in ” + (endTime – startTime) + ” ms. ***\n”);

其中第 2 - 4 行是必须的,这三行是从 spark1.3 里面摘出来的。其他三行只是想打个日志,看看这段代码放的执行时间。

然后就是编译源码了:

mvn -PHadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package

具体参考 http://spark.apache.org/docs/1.2.1/building-spark.html

我在一台服务器上测试了编译之后的 spark,问题解决了,执行很顺利,性能没有任何影响。读取 600 个 parquet 文件,加上的几行代码只用了 1ms 左右。

————————————– 分割线 ————————————–

Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

CentOS 6.2(64 位) 下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark 简介及其在 Ubuntu 下的安装使用 http://www.linuxidc.com/Linux/2013-08/88606.htm

安装 Spark 集群 (在 CentOS 上) http://www.linuxidc.com/Linux/2013-08/88599.htm

Hadoop vs Spark 性能对比 http://www.linuxidc.com/Linux/2013-08/88597.htm

Spark 安装与学习 http://www.linuxidc.com/Linux/2013-08/88596.htm

Spark 并行计算模型 http://www.linuxidc.com/Linux/2012-12/76490.htm

————————————– 分割线 ————————————–

Spark 的详细介绍 :请点这里
Spark 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-05/117084.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1977字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中