如何使用其他值之间的值连接数据集?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何使用其他值之间的值连接数据集?

社区小助手 2019-01-02 14:58:12 426

我有一个用例,我需要加入2个数据帧。

ID视图

ID BookTime
1 2
1 5
2 8
2 3
3 4
FareRule视图

Start End Fare
1 3 10
3 6 20
6 10 25
输出是通过检查连接的结果BookTime从ID表。的Fare是基于即之间的窗口上计算Start和End从FareRule。

ID FareDue
1 10
1 20
2 25
2 20
3 20
我正在创建这些数据框架中的视图,并使用CROSS JOIN加入它们。但正如我们所知,CROSS加入是昂贵的,所以有更好的方式加入它们吗?

SELECT

ID, 
Fare AS FareDue 

FROM

ID 

CROSS JOIN

FareRule 

WHERE
BookTime >=Start
AND
BookTime< End

测试技术
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:24:24

    给定以下数据集:

    val id = Seq((1, 2), (1, 5), (2, 8), (2, 3), (3, 4)).toDF("ID", "BookTime")

    scala> id.show
    ID BookTime
    1 2
    1 5
    2 8
    2 3
    3 4

    val fareRule = Seq((1,3,10), (3,6,20), (6,10,25)).toDF("start", "end", "fare")

    scala> fareRule.show
    start end fare
    1 3 10
    3 6 20
    6 10 25

    val q = id.join(fareRule).where('BookTime between('start, 'end)).select('id, 'fare)

    scala> q.show
    id fare
    1 10
    1 20
    2 25
    2 10
    2 20
    3 20

    您可能需要进行调整,between以便边界在一侧是独占的。between默认情况下使用下限和上限

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题