我如何从 PySpark DataFrame 中减去 N 特定行?
How would I subtract N specific rows from a PySpark DataFrame?
我有一个数据框,nsdf
,我想对其中的 5% 进行采样。 nsdf
看起来像这样:
col1
8
7
7
8
7
8
8
7
(... and so on)
我这样采样 nsdf
:
sdf = nsdf.sample(0.05)
然后我想从 nsdf
中删除 sdf
中的行。现在,在这里我想我可以使用 nsdf.subtract(sdf)
,但这会删除 nsdf
中匹配 sdf
中任何行的 所有 行。例如,如果 sdf
包含
col1
7
8
然后 nsdf
中的每个 行将被删除,因为它们都是 7 或 8。有没有办法删除 只有出现在sdf
中的7's/8(或其他)的数量?更具体地说,在这个例子中,我想得到一个包含相同数据但少一个 7 和一个 8 的 nsdf
。
subtract
is to remove all instances of a row in the left dataframe if present in the right dataframe. What you are looking for is exceptAll
的行为。
示例:
数据设置
df = spark.createDataFrame([(7,), (8,), (7,), (8,)], ("col1", ))
场景 1:
df1 = spark.createDataFrame([(7,), (8,)], ("col1", ))
df.exceptAll(df1).show()
输出
+----+
|col1|
+----+
| 7|
| 8|
+----+
场景 2:
df2 = spark.createDataFrame([(7,), (7,), (8,)], ("col1", ))
df.exceptAll(df2).show()
输出
+----+
|col1|
+----+
| 8|
+----+
我有一个数据框,nsdf
,我想对其中的 5% 进行采样。 nsdf
看起来像这样:
col1 8 7 7 8 7 8 8 7 (... and so on)
我这样采样 nsdf
:
sdf = nsdf.sample(0.05)
然后我想从 nsdf
中删除 sdf
中的行。现在,在这里我想我可以使用 nsdf.subtract(sdf)
,但这会删除 nsdf
中匹配 sdf
中任何行的 所有 行。例如,如果 sdf
包含
col1 7 8
然后 nsdf
中的每个 行将被删除,因为它们都是 7 或 8。有没有办法删除 只有出现在sdf
中的7's/8(或其他)的数量?更具体地说,在这个例子中,我想得到一个包含相同数据但少一个 7 和一个 8 的 nsdf
。
subtract
is to remove all instances of a row in the left dataframe if present in the right dataframe. What you are looking for is exceptAll
的行为。
示例:
数据设置
df = spark.createDataFrame([(7,), (8,), (7,), (8,)], ("col1", ))
场景 1:
df1 = spark.createDataFrame([(7,), (8,)], ("col1", ))
df.exceptAll(df1).show()
输出
+----+
|col1|
+----+
| 7|
| 8|
+----+
场景 2:
df2 = spark.createDataFrame([(7,), (7,), (8,)], ("col1", ))
df.exceptAll(df2).show()
输出
+----+
|col1|
+----+
| 8|
+----+