如何在 spark 中轉換下面的 sql?我試圖做下面的作業,但看到這個錯誤 -
Error evaluating method : '$eq$eq$eq': 方法拋出了 'java.lang.RuntimeException' 例外。
我也不確定如何在spark查詢中表示where sp1.cart_id = sp.cart_id
select distinct
o.order_id
, 'PENDING'
from shopping sp
行內訂單o
on o.cart_id = sp.cart_id
where o.order_date = (select max(sp1.order_date)
從shopping sp1
where sp1.cart_id = sp.cart_id)
SHOPPING_DF
.select(
"ORDER_ID",
"PENDING")
.加入(ORDER_DF, Seq("CART_ID"), "inner")
.filter(col(ORDER_DATE) === SHOPPING_DF.groupBy("CART_ID").agg(max("ORDER_DATE"))```)
uj5u.com熱心網友回復:
如果這個查詢被改寫為一個簡單的連接表shopping,使用視窗函式max來確定每個cart_id的訂單日期,這可以很容易地被改寫為sql
SELECT DISTINCT
o.order_id。
'PENDING'
FROM[/span]。
order o
INNER JOIN (
SELECT
cart_id。
MAX(order_date) OVER (
PARTITION BY cart_id
) as order_date
FROM[/span
購物
) sp ON sp.cart_id = o.cart_id and
sp.order_date = o.order_date
這可以在你的spark會話上運行以實作結果。
將此轉換為spark api,可以寫成
ORDER_DF.alias('o')
.join()
SHOPPING_DF.selectExpr(
"cart_id",
"MAX(order_date) OVER (PARTITION BY cart_id) as order_date"。
).別名("sp")。
Seq("cart_id","order_date")。
"inner">
)
.selectExpr(
"o.order_id",
"'PENDING' as PENDING".
).distinct()
讓我知道這是否對你有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309112.html
標籤:
下一篇:在目標C中設定變數不當
