簡體   English   中英

通過 Pyspark (Python) 上的內部連接和過濾條件連接兩個數據幀

[英]Joining two dataframes through an inner join and a filter condition on Pyspark (Python)

我需要根據右側 dataframe 中一列的值將兩個數據幀與內部連接和過濾條件連接起來。 我已經嘗試了一些我在這里看到的問題,但到目前為止沒有任何工作,有人可以幫忙嗎?

我有兩個數據框:df_consumos_diarios 和 df_facturas_mes_actual_flg。 他們有一個共同點:id_cliente

這是兩個DF:

df_consumos_diarios.show(5)
+----------+----------------+------------+----------------------+---------------------+----------+
|id_cliente|consumo_datos_MB|sms_enviados|minutos_llamadas_movil|minutos_llamadas_fijo|     fecha|
+----------+----------------+------------+----------------------+---------------------+----------+
|         1|             664|           3|                    25|                    0|2020-08-01|
|         1|             943|           0|                    12|                    5|2020-08-02|
|         1|            1035|           1|                    46|                   10|2020-08-03|
|         1|             760|           3|                    17|                    0|2020-08-04|
|         1|            1409|           1|                    31|                    4|2020-08-05|


df_facturas_mes_actual_flg.show(5)
+----------+---------+-------+----------+----+-----------+
|id_cliente|id_oferta|importe|     fecha|edad|flg_mes_ant|
+----------+---------+-------+----------+----+-----------+
|         1|        9|   36.5|2020-07-31|  26|          1|
|         1|        6|  118.6|2020-07-31|  26|          1|
|         1|        6|  124.5|2020-07-31|  26|          1|
|         2|        4|   95.0|2020-07-31|  58|          1|
|         3|        5|  102.5|2020-07-31|  68|          1|
+----------+---------+-------+----------+----+-----------+

我想做內部連接而不是合並或連接的原因是因為這些是 pyspark.sql 數據幀,我認為這樣更容易。

我想要做的是加入從這兩個中創建一個新的 dataframe,我只在右側 dataframe 的“flg_mes_ant”下顯示不等於 1 的值。 當我編寫內部連接子句時,代碼可以正常工作,但是添加過濾條件會使一切變得混亂。 這是我迄今為止嘗試過的:

   df2 = df_consumos_diarios.join(df_facturas_mes_actual_flg, on=["id_cliente"] & 
         [df_facturas_mes_actual_flg["flg_mes_ant"] != "1"], how='inner')

我收到的錯誤消息是:

類型錯誤:& 不支持的操作數類型:“列表”和“列表”

有誰知道我做錯了什么以及如何克服這個錯誤?

您可以在加入后進行過濾:

import pyspark.sql.functions as F

df2 = df_consumos_diarios.join(
    df_facturas_mes_actual_flg, 
    on="id_cliente", 
    how='inner'
).filter(F.col("flg_mes_ant") != "1")

或者你可以在加入前過濾正確的dataframe(應該更高效):

df2 = df_consumos_diarios.join(
    df_facturas_mes_actual_flg.filter(df_facturas_mes_actual_flg["flg_mes_ant"] != "1"), 
    on="id_cliente", 
    how='inner'
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM