这两天在学习join的几种方式,其中提到hash等值和不等值连接,于是进行了概念清晰
首先我先说下我第一误区,我等值和不等值难道是只有数字相等吗?不包括字符串其他吗?
于是对hash值进行重新研究
https://zhuanlan.zhihu.com/p/118148884
通过这篇文章我们更进一步了解到hash其实可以针对多种数据类型
数据是会有各种格式的,字符串,浮点……
那么第二个疑问我们在SparkSql中指的不等值连接是什么?
其实是类似 >,< bettwen …and…等操作,有种区间的连接
举例:
【SQL】spark sql 不等值 join
products一个商品价格变化的表,orders商品订单,记录每次购买商品和日期
基于Spark SQL中的不等值join实现orders和products的匹配,统计每个订单中商品对应当时的价格
缓慢变化的商品价格表
旺仔牛奶,发生过一次价格变更
scala> products.show();
+----+----------+----------+-----+
|name| startDate| endDate|price|
+----+----------+----------+-----+
|旺仔牛奶|2017-01-01|2018-01-01| 4|
|旺仔牛奶|2018-01-02|2020-01-01| 5|
| 王老吉|2017-01-02|2019-01-01| 5|
|卫龙辣条|2010-01-01|2020-01-01| 2|
+----+----------+----------+-----+
订单表(商品名称,订单日期)
旺仔牛奶在不同价格时段分别发生了一次订单
scala> orders.show
+----------+-------+
| date|product|
+----------+-------+
|2017-06-01|旺仔牛奶|
|2017-07-01| 王老吉|
|2018-03-01|旺仔牛奶|
+----------+-------+
通过不等值连接,计算每个订单当时的商品价格
查看出旺仔牛奶,两个订单在不同时间段上对应的价格