parquet常用 *** 作

parquet常用 *** 作,第1张

网上有第二种创建方法:

第一种是hive0.13之后的版本,第二种时0.13之前的版本。目前大都是使用第一种创建方法。 https://cwiki.apache.org/confluence/display/Hive/Parquet

注意:

1)有SNAPPY和GZIP两种压缩算法,GZIP不管时从空间大小还是查询性能都比较优秀。

2)指定orc压缩格式是:TBLPROPERTIES('orc.compress'='ZLIB')parquet是TBLPROPERTIES('parquet.compression'='衡闭SNAPPY')

Hadoop Streaming限制:

1)Hadoop Streaming读写的数据格式都是Text文件格式。针对于parquet文件格式,无法直接读取,需要经过转换器转换。

2)Hadoop Streaming读写的api全是旧API,即mapred包。无法处理咐则裂新API,mapreduce包。

MR新旧API读写parquet的例子可在 https://blog.csdn.net/woloqun/article/details/76068147 中找到。

可通过网友写的一个库直接用Hadoop Streaming读写parquet

https://github.com/whale2/iow-hadoop-streaming

举例:

注意事项:

通过spark,mapreduce读写盯旅parquet的方式可参考文章: https://blog.csdn.net/woloqun/article/details/76068147

df.write.format("parquet").mode(SaveMode.Overwrite).save(outputPath)

一、 *** 作系统不允许非法字符包含简历在文件目录旦空名中(这里的outputPath),所以在命名前需要将特殊字符过滤:

将不属于a-z,A-Z,0-9的字符去掉。

val pattern = sc.broadcast(Pattern.compile("[^a-zA-Z0-9]"))

val matcher = pattern.value.matcher(element(1)).replaceAll("拦迟搜").toLowerCase()

从而element(1)过滤掉非法字符后,用matcher替代即可。

二、目录的名称限制为255个字符,由于服务器这里没有权限改hdfs设置,所以只能在写入前,将目录截取为255。

三、parquet写文件时,列不区分大小写,从而可能会出现重复列的错误

例如reference "teacher" is ambiguous。

意思是teacher列出现了重复,但其实在dataframe中有一个teacher列和一个Teacher列。

这样只能修改列的名称,使它们不区分大小写也不一样。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12258087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存