java—使用hive和hdfs进行聚合的三方连接

ttisahbt  于 2021-05-31  发布在  Hadoop
关注(0)|答案(0)|浏览(228)

这基本上是一个设计问题,我有。寻找最有效的方法来实现这一点。以下是情景。。。。
我们有三条数据。他们是:

DATASET 1 (HDFS) (Primary key: acct_num)
acct_num
3111
6111

DATASET 2 (HIVE) (Primary key: acct_num & cust_num)
acct_num|cust_num
1111|AAAA
2111|AAAA
3111|BBBB
4111|CCCC
5111|DDDD
6111|DDDD

DATASET 3 (HIVE) (Primary key: acct_num)
acct_num|last_cycle_dt
1111|20181225
2111|20190118
3111|20181220
4111|20181227
5111|20181223
6111|20181222

我要做的是从一个Dataframe中创建一个hdfs文件,该Dataframe是一组满足以下条件的帐户的选择:
数据集1中存在的帐户或最后一个周期日期(last\u cycle\u dt)大于提供的日期值的帐户。下面是曲线球:如果您满足上述条件或声明,我们还希望引入您的所有关系帐户(因此,如果客户aaaa满足其任何帐户的上述条件,我们将引入其所有帐户)。
假设“提供的日期值”为20180116。根据我上面提到的规则,我们需要引入dataset1中存在的所有帐户(因为如果你在dataset1中,你总是需要加入),并且任何最后一个周期日期(last\u cycle\u dt)大于20180116的帐户。唯一符合要求的账户是2111和5111账户。但是,我们现在需要将关系帐户引入到该客户中(对于数据集1中的两个帐户,如果您满足上一个周期日期逻辑!!!)。所以我们的最终数据集是(包括我们加入的所有数据集中的列)

RESULTS DATAFRAME (Written to HDFS)
acct_num|cust_num|last_cycle_dt
1111|AAAA|20170125
2111|AAAA|20180118
3111|BBBB|20171220
5111|DDDD|20181223
6111|DDDD|20181222

1111和2111被引入是因为2111满足了上一个周期的日期逻辑,所以我们引入了关系。3111被引入,因为它存在于数据集1中。引入5111和6111是因为6111存在于数据集1中,我们引入了关系。
我将使用spark用java编写代码。我正在寻找一个高水平的设计,以最有效的方式执行这一点。示例代码将不胜感激。谢谢!!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题