[英]Python Dataframe: Get rows between a specified date range/Period?
[英]How to get the date diff between 2 tables for a range using Spark dataframe
我正在嘗試將下面的 spark Sql 查詢轉換為 Spark Dataframe。
我有Orders
表(OrderID, CustomerID, EmployeeID, OrderDate, ShipperID)
和Shippers
表(ShipperID, ShipperName, OrderDate)
。
我的 Spark SQL 查詢列出了每個托運人發送的訂單數量:
sqlContext.sql("SELECT Shippers.ShipperName, COUNT(Orders.ShipperID)
AS NumberOfOrders FROM Orders LEFT JOIN Shippers ON
Orders.ShipperID = Shippers.ShipperID AND Shippers. OrderDate >= Orders.OrderDate
AND datediff(from_unixtime(cast(UNIX_TIMESTAMP(Shippers.OrderDate,
'yyyy-MM-dd HH:mm:ss')as date)),from_unixtime(cast(UNIX_TIMESTAMP(Orders.
OrderDate,'yyyy-MM-dd HH:mm:ss')as date))) BETWEEN 1 and 10
GROUP BY ShipperName")
我通過查詢轉換對整個連接組沒問題。問題在於日期時間轉換並獲得 1 到 10 天之間的差異。
這是我目前擁有的數據框。 但我的演員表出現錯誤
Shippers.alias("s").join(
Orders.alias("o"),
on = "ShipperID",
how = "left"
).groupby(
"s.ShipperName"
).select(datediff(from_unixtime(cast(unix_timestamp('OrderDate', 'yyyy-MM-dd HH:mm:ss').alias('unix_time'))).between(1,10))).agg(
F.count(F.col("o.OrderID")).alias("NumberOfOrders")
).show()
有人可以幫我將上述 SQL 查詢重構為 Spark Dataframe 嗎?
您要執行的操作應該是這樣的:
import pyspark.sql.functions as F
Orders.alias('o').join(
Shippers.alias('s'),
on = ["ShipperId"],
how = "left"
).filter(
(
F.col("s.OrderDate") >= F.col("o.OrderDate")
) &
(
F.datediff(
F.from_unixtime(
F.unix_timestamp(
F.col('s.OrderDate'),
'yyyy-MM-dd HH:mm:ss'
)
).cast('date'),
F.from_unixtime(
F.unix_timestamp(
F.col('o.OrderDate'),
'yyyy-MM-dd HH:mm:ss'
)
).cast('date')
).between(1,10)
)
).groupby(
"ShipperName"
).agg(
F.count(F.col("o.ShipperID")).alias("NumberOfOrders")
)
根據錯誤可能會有一些變化,但邏輯應該是這樣的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.