我使用的是azure databricks,我有以下sql查询,我想将其转换为spark python代码:
SELECT DISTINCT
personID,
SUM(quantity) as total_shipped
FROM(
SELECT p.personID,
p.systemID,
s.quantity
FROM shipped s
LEFT JOIN ordered p
on (s.OrderId = p.OrderNumber OR
substr(s.OrderId,1,6) = p.OrderNumber )
and p.ndcnum = s.ndc
where s.Dateshipped <= "2022-04-07"
AND personID is not null
group by personID
我打算先合并spark数据帧,然后执行聚合和。然而,我认为我正在使它变得比实际情况更复杂。到目前为止,这就是我所拥有的,但我得到了InvalidSyntax
错误:
ordered.join(shipped, ((ordered("OrderId").or(ordered.select(substring(ordered.OrderId, 1, 6)))) === ordered("ORDERNUMBER")) &&
(ordered("ndcnumber") === ordered("ndc")),"left")
.show()
我感到困惑的是SQL查询中的OR语句,如何将其转换为spark-python语句?
使用数据块很有美感。您可以通过调用spark.sql(""" {your sql query here} """)
直接使用相同的代码,仍然会得到相同的结果。您可以将它分配给一个变量,这样您就有了一个数据帧。