写parquet文件遇到的问题

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列。
这样只能修改列的名称,使它们不区分大小写也不一样。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容