Disons que j'ai le tableau suivant:
+--------------------+--------------------+------+------------+--------------------+
| Host| path|status|content_size| time|
+--------------------+--------------------+------+------------+--------------------+
|js002.cc.utsunomi...|/shuttle/resource...| 404| 0|1995-08-01 00:07:...|
| tia1.eskimo.com |/pub/winvn/releas...| 404| 0|1995-08-01 00:28:...|
|grimnet23.idirect...|/www/software/win...| 404| 0|1995-08-01 00:50:...|
|miriworld.its.uni...|/history/history.htm| 404| 0|1995-08-01 01:04:...|
| ras38.srv.net |/elv/DELTA/uncons...| 404| 0|1995-08-01 01:05:...|
| cs1-06.leh.ptd.net | | 404| 0|1995-08-01 01:17:...|
|dialip-24.athenet...|/history/apollo/a...| 404| 0|1995-08-01 01:33:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:35:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:36:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:37:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:37:...|
| h96-158.ccnet.com |/history/apollo/a...| 404| 0|1995-08-01 01:37:...|
|hsccs_gatorbox07....|/pub/winvn/releas...| 404| 0|1995-08-01 01:44:...|
|www-b2.proxy.aol....|/pub/winvn/readme...| 404| 0|1995-08-01 01:48:...|
|www-b2.proxy.aol....|/pub/winvn/releas...| 404| 0|1995-08-01 01:48:...|
+--------------------+--------------------+------+------------+--------------------+
Comment filtrer cette table pour n'avoir que des chemins distincts dans PySpark? Mais le tableau doit contenir toutes les colonnes.
Si vous souhaitez enregistrer des lignes où toutes les valeurs d'une colonne spécifique sont distinctes, vous devez appeler la méthode dropDuplicates
sur DataFrame. Comme ceci dans mon exemple:
dataFrame = ...
dataFrame.dropDuplicates(['path'])
où chemin est le nom de la colonne
En ce qui concerne le réglage des enregistrements qui sont conservés et supprimés, si vous pouvez travailler vos conditions dans une expression Window, vous pouvez utiliser quelque chose comme ça. C'est en scala (plus ou moins) mais j'imagine que vous pouvez aussi le faire dans PySpark.
val window = Window.parititionBy ('colonnes,' à, 'faire', unique) .orderBy ('conditionToPutRowToKeepFirst)
dataframe.withColumn ("row_number", row_number (). over (window)). where ('row_number === 1) .drop (' row_number)