从多个火花工人以镶木地板格式保存

Posted

技术标签:

【中文标题】从多个火花工人以镶木地板格式保存【英文标题】:Saving in parquet format from multiple spark workers 【发布时间】:2015-10-01 21:56:57 【问题描述】:

我有一份工作需要以 parquet/avro 格式保存所有工作节点的结果。我可以为每个单独的分区创建一个单独的 parquet 文件并将所有生成的文件作为一个表读取吗?或者有没有更好的方法来解决这个问题? 输入分为 96 个分区,结果需要保存在 HDFS 上。当我尝试将其保存为文件时,它创建了超过一百万个小文件。

【问题讨论】:

【参考方案1】:

您可以在调用write 之前对所需数量的分区执行repartition(或coalesce,如果您总是想要更少的分区)。然后,您的数据将被写入相同数量的文件中。当您想读入数据时,您只需指向包含文件的文件夹而不是特定文件。像这样:

sqlContext.read.parquet("s3://my-bucket/path/to/files/")  

【讨论】:

它不在 RDD 中。需要从 JAVA 本身中保存。 因为它是一个映射的 RDD 重新分区删除了很多数据。因此,现在我们将 RDD 转换为 Dataframe,然后将其合并为 3。 嗯...首先,映射的 RDD 仍然是 RDD。其次,调用repartition 不会删除任何数据,它只会将数据随机排列到所需数量的分区中。第三,您确实可以使用coalesce 而不是repartition(我已经用这个更新了我的答案)。

以上是关于从多个火花工人以镶木地板格式保存的主要内容,如果未能解决你的问题,请参考以下文章

将火花数据帧写入镶木地板格式时出现内存不足错误

我可以直接查询以镶木地板格式存储在 s3 中的数据的红移表吗

AWS Spectrum 为 AWS Glue 生成的镶木地板文件提供空白结果

将数据保存到HDFS的格式是什么?

从具有时间戳的镶木地板蜂巢表中读取火花

Pyspark:以表格格式显示火花数据框