【发布时间】:2017-10-25 15:48:14
【问题描述】:
我在 HDF 中有结构化的基本文本文件,其中包含这样的数据(在 file.txt 中):
OgId|^|ItemId|^|segmentId|^|Sequence|^|Action|!|
4295877341|^|136|^|4|^|1|^|I|!|
4295877346|^|136|^|4|^|1|^|I|!|
4295877341|^|138|^|2|^|1|^|I|!|
4295877341|^|141|^|4|^|1|^|I|!|
4295877341|^|143|^|2|^|1|^|I|!|
4295877341|^|145|^|14|^|1|^|I|!|
123456789|^|145|^|14|^|1|^|I|!|
file.txt 的大小为 30 GB。
我有大约 2 GB 的增量数据 file1.txt 以相同的格式出现在 HFDS 中,如下所示:
OgId|^|ItemId|^|segmentId|^|Sequence|^|Action|!|
4295877341|^|213|^|4|^|1|^|I|!|
4295877341|^|213|^|4|^|1|^|I|!|
4295877341|^|215|^|2|^|1|^|I|!|
4295877341|^|141|^|4|^|1|^|I|!|
4295877341|^|143|^|2|^|1|^|I|!|
4295877343|^|149|^|14|^|2|^|I|!|
123456789|^|145|^|14|^|1|^|D|!|
现在我必须合并 file.txt 和 file1.txt 并创建一个包含所有唯一记录的最终文本文件。
两个文件中的键都是 OrgId。如果在第一个文件中找到相同的 OrgId,那么我必须用新的 OrgId 替换,如果没有,那么我必须插入新的 OrgId。
最终输出是这样的。
OgId|^|ItemId|^|segmentId|^|Sequence|^|Action|!|
4295877346|^|136|^|4|^|1|^|I|!|
4295877341|^|213|^|4|^|1|^|I|!|
4295877341|^|215|^|2|^|1|^|I|!|
4295877341|^|141|^|4|^|1|^|I|!|
4295877341|^|143|^|2|^|1|^|I|!|
4295877343|^|149|^|14|^|2|^|I|!|
如何在 mapreduce 中做到这一点?
我不会选择 HIVE 解决方案,因为我有很多这样的不同文件,大约 10.000 个,所以我必须在 HIVE 中创建 10.000 个分区。
对这个用例使用 Spark 有什么建议吗?
【问题讨论】:
-
为什么要在 mapreduce 中?我可以建议你在 scala 中回答 Spark 和 Hadoop 吗?
-
是的,请......一些代码会很棒
-
我猜你对 Spark、Scala 和 dataFrame 有一定的了解,对吗?
-
我没看懂你的台词
.If same OrgId is found in the first file then i have to replace with the new OrgId and if not then then i have to insert new OrgId.你能澄清一下吗? -
是的,我已经开始学习了。说到我的问题,基本上我必须用新记录替换记录,如果 OrgId 匹配,如果不匹配,则将其视为新记录,因此将被附加。
标签: hadoop apache-spark mapreduce hdfs