第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PySpark:根據來自另一個數(shù)據框的日期范圍過濾數(shù)據

PySpark:根據來自另一個數(shù)據框的日期范圍過濾數(shù)據

明月笑刀無情 2021-12-21 14:59:27
如果位于和之間,我試圖從df1 中選擇記錄(僅允許三個范圍的 date2、date3 組合、逐行)。df1.date1df2.date2df2.date3就我而言,沒有共同的變量來建立“加入”標準。我嘗試了不同的 pyspark.sql 函數(shù),例如 'filter'、'when'、'withColumn'、'date_sub'、'date_add' 等,但無法找到解決方案。我確實瀏覽了幾篇 SO 帖子,但是,他們中的大多數(shù)建議使用“加入”,這可能不適合我的問題!df1+----------+-----------+|  emp_id  |   date1   |+----------+-----------+|   67891  | 11-13-2015||   12345  | 02-28-2017||   34567  | 04-07-2017|+----------+-----------+df2+------------+------------+|  date2     |   date3    |+------------+------------+|01-28-2017  | 03-15-2017 ||07-13-2017  | 11-13-2017 ||06-07-2018  | 09-07-2018 |+------------+------------+預期記錄:+----------+-----------+|  emp_id  |   date1   |+----------+-----------+|   12345  | 02-28-2017|+----------+-----------+
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

您可以在 spark 中進行非對等連接。您不一定需要匹配的鍵。


這是在scala中,我很確定它在python中幾乎相同。讓我知道它是否不起作用。也會更新 pyspark 中的答案。


scala> df1.join(df2 , 'date1 > 'date2 && 'date1 < 'date3).show

    +------+----------+----------+----------+

    |emp_id|     date1|     date2|     date3|

    +------+----------+----------+----------+

    | 12345|02-28-2017|01-28-2017|03-15-2017|

    +------+----------+----------+----------+

Pyspark 解決方案:


>>> from pyspark.sql.functions import unix_timestamp

>>> from pyspark.sql.functions import from_unixtime

>>> x = [(67891 ,'11-13-2015'),(12345, '02-28-2017'),(34567,'04-07-2017')]

>>> df1 = spark.createDataFrame(x,['emp_id','date1'])

>>> y = [('01-28-2017','03-15-2017'),('07-13-2017','11-13-2017'),('06-07-2018','09-07-2018')]

>>> df2 = spark.createDataFrame(y,['date2','date3'])

>>> df1a = df1.select('emp_id', from_unixtime(unix_timestamp('date1', 'MM-dd-yyy')).alias('date1'))

>>> df2a = df2.select(from_unixtime(unix_timestamp('date2', 'MM-dd-yyy')).alias('date2'),from_unixtime(unix_timestamp('date3', 'MM-dd-yyy')).alias('date3'))



>>> df1a.join(df2a, on=[df1a['date1'] > df2a['date2'], df1a['date1'] < df2a['date3']]).show()

+------+-------------------+-------------------+-------------------+

|emp_id|              date1|              date2|              date3|

+------+-------------------+-------------------+-------------------+

| 12345|2017-02-28 00:00:00|2017-01-28 00:00:00|2017-03-15 00:00:00|

+------+-------------------+-------------------+-------------------+


查看完整回答
反對 回復 2021-12-21
  • 1 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號