public static <T> PTransform<PCollection<T>, PCollection<T>> exceptAll(
      PCollection<T> rightCollection) {
    checkNotNull(rightCollection, "rightCollection argument is null");
    return new SetImpl<>(rightCollection, exceptAll());
  }
@Test
  @Category(NeedsRunner.class)
  public void testExceptAllCollectionList() {
    PCollection<String> third = p.apply("third", Create.of(Arrays.asList("a", "b", "b", "g", "f")));
    PCollection<Row> thirdRows = p.apply("thirdRows", Create.of(toRows("a", "b", "b", "g")));

    PAssert.that(
            PCollectionList.of(first).and(second).and(third).apply("stringsCols", Sets.exceptAll()))
        .containsInAnyOrder("g", "h", "h");

    PCollection<Row> results =
        PCollectionList.of(firstRows)
            .and(secondRows)
            .and(thirdRows)
            .apply("rowCols", Sets.exceptAll());

    PAssert.that(results).containsInAnyOrder(toRows("g", "h", "h"));

    assertEquals(schema, results.getSchema());

    p.run();
  }