web-dev-qa-db-ja.com

PySparkの1つの列の個別の値で行をフィルター処理する

次の表があるとします。

+--------------------+--------------------+------+------------+--------------------+
|                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:...|
+--------------------+--------------------+------+------------+--------------------+

このテーブルをフィルタリングして、PySparkに異なるパスのみを含めるにはどうすればよいですか?ただし、テーブルにはすべての列が含まれている必要があります。

15
likern

特定の列のすべての値が異なる行を保存する場合は、DataFrameでdropDuplicatesメソッドを呼び出す必要があります。私の例ではこのように:

dataFrame = ... 
dataFrame.dropDuplicates(['path'])

ここでpathは列名です

21
likern

保持および破棄されるレコードのチューニングについては、条件をウィンドウ式に組み込むことができれば、次のようなものを使用できます。これはscala(多かれ少なかれ)にありますが、PySparkでもできると思います。

val window = Window.parititionBy( '​​columns、' to、 'make、' unique).orderBy( '​​conditionToPutRowToKeepFirst)

dataframe.withColumn( "row_number"、row_number()。over(window))。where( 'row_number === 1).drop(' row_number)

0
Mark Hanson