dropDuplicates() 不适用于 pyspark 但适用于 Spark java

Jes*_*sse 5 apache-spark apache-spark-sql pyspark

我有一个转换,其唯一目的是删除重复项。使用PySpark 2.x时,生成的输出会删除一些重复项,但不是全部。使用Apache Spark Java 2.x时,结果输出符合预期,并且删除了所有重复项。

我目前正在 YARN 上运行 Spark。我的数据集大约有 1.25 亿行 x 200 列。预计某些列包含空值。对于我的用例,我确实有纯重复项(其原因超出了范围)。到目前为止,我已经尝试过:

  1. dropDuplicates(df.columns) / dropDuplicates(), PySpark -> 删除一些但不是全部重复项
  2. unique(),PySpark -> 删除一些但不是全部重复项,行数与 1 不同。
  3. dropDuplicates([primary_key_I_created]),PySpark -> 有效
  4. dropDuplicates(dataset.columns()),Apache Spark Java -> 有效

我检查了物理计划,方法 1 和方法 4 都生成了相同的计划。它们大致如下:

+-HashAggregate(keys=[column_1, column_2, .... 198 more fields], functions=[], output=[column_1, column_2, ... 198 more fields]
  +-Exchange hashpartitioning(column_1, column_2, ... 198 more fields)
    +-HashAggregate(keys=[column_1, column_2, .... 198 more fields], functions=[], output=[column_1, column_2, ... 198 more fields]
      +-FileScan parquet ....
Run Code Online (Sandbox Code Playgroud)

下面是一对未删除的重复行的示例。我通过在这两行上运行 dropDuplicates() 确认没有奇怪的空白错误。该运行按预期工作,返回一行。

column_1 | column_2 | column_3 | column_4 | column_5| ..... column_200
 bob        jones     **null**   **null**   200.00           30
 bob        jones     **null**   **null**   200.00           30
Run Code Online (Sandbox Code Playgroud)

是否有什么事情会导致 PySpark 失败,但 Spark Java 成功(对我在这里含糊的行话表示歉意)?提前致谢。