Spark 数据集写入 2 个不同的目录

Posted

技术标签:

【中文标题】Spark 数据集写入 2 个不同的目录【英文标题】:Spark dataset write into 2 different directories 【发布时间】:2020-12-16 21:16:33 【问题描述】:

我在 spark 中有一个数据集,由 ip 列分区。现在我想把这个数据集分成 2 并写入 HDFS,这样如果总分区是 100ip=1 to ip=100 那么每个 HDFS 目录最终应该包含 50 个分区。

输入:

mydata/
mydata/ip=1
mydata/ip=2
mydata/ip=3
mydata/ip=4
.
.
mydata/ip=101

结果

mydata1/
mydata1/ip=1
mydata1/ip=3
.
.
mydata1/ip=50


mydata2/
mydata2/ip=51
mydata2/ip=4
mydata2/ip=100

另外,在写出我如何确保每个目录 mydata1 和 mydata2 包含大小相等的数据分布时。这意味着两个目录都应该包含例如 25Gb 或数据, 不应该出现 mydata1 包含 1GB 而 mydata2 包含 49GB 的情况

谢谢

【问题讨论】:

【参考方案1】:

是的,您可以使用分桶。阅读更多关于 buckinting 的信息: https://dwgeek.com/spark-sql-bucketing-on-dataframe-examples.html/

【讨论】:

谢谢。如何使用 spark 读取分桶数据,以便我可以从特定的桶中读取,上面的文章只解释了写入桶的内容?此外,像分区分桶一样,不会为每个桶创建一个新目录。我们能做到吗?

以上是关于Spark 数据集写入 2 个不同的目录的主要内容,如果未能解决你的问题,请参考以下文章

将数据集写入 MS SQL 服务器失败

在 Spark 中,将数据集写入数据库时​​,保存操作需要一些预先假定的时间

Spark 2.2 排序失败,数据集庞大

Spark:如何找出两个数据集之间的不同元素?

Spark SQL - 无法将所有记录写入配置单元表

将 Spark 数据集转换为 JSON 并写入 Kafka Producer