Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Pyspark(Python)上通过内部连接和过滤条件连接两个数据帧_Python_Apache Spark_Join_Pyspark_Apache Spark Sql - Fatal编程技术网

在Pyspark(Python)上通过内部连接和过滤条件连接两个数据帧

在Pyspark(Python)上通过内部连接和过滤条件连接两个数据帧,python,apache-spark,join,pyspark,apache-spark-sql,Python,Apache Spark,Join,Pyspark,Apache Spark Sql,我需要根据右数据框中一列的值,使用内部连接和筛选条件连接两个数据框。我已经尝试了一些我在这里看到的问题,但是到目前为止没有任何效果,有人能帮忙吗 我有两个数据帧:df_consumos_diarios和df_facturas_mes_actual_flg。 他们有一个共同点:id_客户 以下是两个DFs: df_consumos_diarios.show(5) +----------+----------------+------------+----------------------+---

我需要根据右数据框中一列的值,使用内部连接和筛选条件连接两个数据框。我已经尝试了一些我在这里看到的问题,但是到目前为止没有任何效果,有人能帮忙吗

我有两个数据帧:df_consumos_diarios和df_facturas_mes_actual_flg。 他们有一个共同点:id_客户

以下是两个DFs:

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数据帧,我认为这样更容易

我想做的是在这两个数据框中联合创建一个新的数据框,其中我只在右侧数据框的“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')
我收到的错误消息是:

TypeError:&:“list”和“list”的操作数类型不受支持


有人知道我做错了什么,以及我如何克服这个错误吗?

您可以在加入后进行筛选:

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")
或者,您可以在加入之前过滤正确的数据帧(这应该更有效):

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'
)