从多个火花工人以镶木地板格式保存
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 中的数据的红移表吗