分享

spark处理parquet文件方案求教

spark从hdfs上读取parquet文件,我是这么实现的val rdd = context.sql("xxxxx").orderBy("xx").rdd
rdd.saveAsTextFile("xxxxx")
这样发现在转化rdd的时候太慢并且saveAsTextFile这一步也太慢
请问有木有更快的办法来实现?或者排序用rdd的sortBy来排会不会更快?
请大神指导下吧



已有(2)人评论

跳转到指定楼层
langke93 发表于 2017-6-6 19:01:19
本帖最后由 langke93 于 2017-6-6 19:07 编辑

个人认为两个地方可以优化1.可以尝试在sql里面排序,而不是在外面排序

2.dataframe可以直接写成parquet文件,不需要再次转换为rdd[spark2.0]
context.sql("xxxxx").write.parquet("file:///usr/local/spark/myCode/newpeople.parquet")

回复

使用道具 举报

macWang 发表于 2017-6-15 10:32:56
langke93 发表于 2017-6-6 19:01
个人认为两个地方可以优化1.可以尝试在sql里面排序,而不是在外面排序

2.dataframe可以直接写成parquet ...

你好,是这样的:我把parquet文件读出来之后,要经过处理排序。很奇怪的是,dataframe = context.sql(xxx),这个dataframe.foreach(println)可以看到结果,但是做其他处理比如:Splitter.on("\t").split(line)的时候就报错:task not serializable。如果dataframe.collect(),又会因为文件太大而报buffer overflow。
我的parquet大概700M左右
这俩问题网上找找也没搞懂,求大神指点下

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条