spark sql 不等值 join

來源:互聯網
上載者:User

標籤:price   end   spark   sql   join   apach   ===   frame   不等值串連   

products一個商品價格變化的表,orders商品訂單,記錄每次購買商品和日期
基於Spark SQL中的不等值join實現orders和products的匹配,統計每個訂單中商品對應當時的價格

緩慢變化的商品價格表
旺仔牛奶,發生過一次價格變更

scala> val products = sc.parallelize(Array(     |   ("旺仔牛奶", "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)     | )).toDF("name", "startDate", "endDate", "price")products: org.apache.spark.sql.DataFrame = [name: string, startDate: string ... 2 more fields]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> val orders = sc.parallelize(Array(     |   ("2017-06-01", "旺仔牛奶"),     |   ("2017-07-01", "王老吉"),     |   ("2018-03-01", "旺仔牛奶")     | )).toDF("date", "product")orders: org.apache.spark.sql.DataFrame = [date: string, product: string]scala> orders.show+----------+-------+|      date|product|+----------+-------+|2017-06-01|旺仔牛奶||2017-07-01|    王老吉||2018-03-01|旺仔牛奶|+----------+-------+

通過不等值串連,計算每個訂單當時的商品價格
查看出旺仔牛奶,兩個訂單在不同時間段上對應的價格

scala> orders.join(products, $"product" === $"name" && $"date" >= $"startDate" && $"date" <= $"endDate").show()+-----------+------------+----------+------------+-------------+-----+|     date      |  product   |    name  |   startDate |   endDate   | price|+-----------+------------+----------+------------+-------------+-----+|2017-07-01|    王老吉  | 王老吉   |2017-01-02|2019-01-01 |    5  ||2017-06-01|  旺仔牛奶 |旺仔牛奶|2017-01-01|2018-01-01 |    4  ||2018-03-01|  旺仔牛奶 |旺仔牛奶|2018-01-02|2020-01-01 |    5  |+-----------+------------+----------+------------+-------------+-----+

spark sql 不等值 join

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.