【问题标题】:Spark Dataframe Union giving duplicatesSpark Dataframe Union 提供重复项
【发布时间】:2018-06-20 11:00:36
【问题描述】:

我有一个基础数据集,其中一列具有空值和非空值。 所以我这样做:

val nonTrained_ds = base_ds.filter(col("col_name").isNull)
val trained_ds = base_ds.filter(col("col_name").isNotNull)

当我打印出来时,我清楚地分开了行。但是当我这样做时,

val combined_ds = nonTrained_ds.union(trained_ds)

我从nonTrained_ds 得到重复的行记录,奇怪的是,来自trained_ds 的行不再在合并的ds 中。

为什么会这样?

trained_ds 的值为:

+----------+----------------+
|unique_no |      running_id|
+----------+----------------+
|0456700001|16              |
|0456700004|16              |
|0456700007|16              |
|0456700010|16              |
|0456700013|16              |
|0456700016|16              |
|0456700019|16              |
|0456700022|16              |
|0456700025|16              |
|0456700028|16              |
|0456700031|16              |
|0456700034|16              |
|0456700037|16              |
|0456700040|16              |
|0456700043|16              |
|0456700046|16              |
|0456700049|16              |
|0456700052|16              |
|0456700055|16              |
|0456700058|16              |
|0456700061|16              |
|0456700064|16              |
|0456700067|16              |
|0456700070|16              |
+----------+----------------+

nonTrained_ds 的值为:

+----------+----------------+
|unique_no |      running_id|
+----------+----------------+
|0456700002|null            |
|0456700003|null            |
|0456700005|null            |
|0456700006|null            |
|0456700008|null            |
|0456700009|null            |
|0456700011|null            |
|0456700012|null            |
|0456700014|null            |
|0456700015|null            |
|0456700017|null            |
|0456700018|null            |
|0456700020|null            |
|0456700021|null            |
|0456700023|null            |
|0456700024|null            |
|0456700026|null            |
|0456700027|null            |
|0456700029|null            |
|0456700030|null            |
|0456700032|null            |
|0456700033|null            |
|0456700035|null            |
|0456700036|null            |
|0456700038|null            |
|0456700039|null            |
|0456700041|null            |
|0456700042|null            |
|0456700044|null            |
|0456700045|null            |
|0456700047|null            |
|0456700048|null            |
|0456700050|null            |
|0456700051|null            |
|0456700053|null            |
|0456700054|null            |
|0456700056|null            |
|0456700057|null            |
|0456700059|null            |
|0456700060|null            |
|0456700062|null            |
|0456700063|null            |
|0456700065|null            |
|0456700066|null            |
|0456700068|null            |
|0456700069|null            |
|0456700071|null            |
|0456700072|null            |
+----------+----------------+

组合ds的值为:

+----------+----------------+
|unique_no |      running_id|
+----------+----------------+
|0456700002|null            |
|0456700003|null            |
|0456700005|null            |
|0456700006|null            |
|0456700008|null            |
|0456700009|null            |
|0456700011|null            |
|0456700012|null            |
|0456700014|null            |
|0456700015|null            |
|0456700017|null            |
|0456700018|null            |
|0456700020|null            |
|0456700021|null            |
|0456700023|null            |
|0456700024|null            |
|0456700026|null            |
|0456700027|null            |
|0456700029|null            |
|0456700030|null            |
|0456700032|null            |
|0456700033|null            |
|0456700035|null            |
|0456700036|null            |
|0456700038|null            |
|0456700039|null            |
|0456700041|null            |
|0456700042|null            |
|0456700044|null            |
|0456700045|null            |
|0456700047|null            |
|0456700048|null            |
|0456700050|null            |
|0456700051|null            |
|0456700053|null            |
|0456700054|null            |
|0456700056|null            |
|0456700057|null            |
|0456700059|null            |
|0456700060|null            |
|0456700062|null            |
|0456700063|null            |
|0456700065|null            |
|0456700066|null            |
|0456700068|null            |
|0456700069|null            |
|0456700071|null            |
|0456700072|null            |
|0456700002|16              |
|0456700005|16              |
|0456700008|16              |
|0456700011|16              |
|0456700014|16              |
|0456700017|16              |
|0456700020|16              |
|0456700023|16              |
|0456700026|16              |
|0456700029|16              |
|0456700032|16              |
|0456700035|16              |
|0456700038|16              |
|0456700041|16              |
|0456700044|16              |
|0456700047|16              |
|0456700050|16              |
|0456700053|16              |
|0456700056|16              |
|0456700059|16              |
|0456700062|16              |
|0456700065|16              |
|0456700068|16              |
|0456700071|16              |
+----------+----------------+

【问题讨论】:

  • 能否显示重复的行和未合并的行?我猜你没有可视化整个数据集。
  • 如果您查看组合数据集输出,“0456700002”值出现了两次。
  • 不确定有人用“-1”标记了这个问题 - 如果它不明确,请询问清楚。如果您查看组合数据集,所有值为“16”的行都是“nonTrained_ds”中第一列的副本
  • 这些是您在输入数据框中拥有的唯一数据吗?在trained_ds 和nontrained_ds 中?还是还有更多?
  • 还有很多其他的列,但中间没有任何修改。我只是将数据集“A”提取到 2 个数据集中并将它们重新加入以获得数据集“A”。我正在使用 Spark 2.0

标签: scala apache-spark


【解决方案1】:

这成功了,

val nonTrained_ds = base_ds.filter(col("primary_offer_id").isNull).distinct()
    val trained_ds = base_ds.filter(col("primary_offer_id").isNotNull).distinct()

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2016-02-22
    • 2018-10-24
    • 1970-01-01
    • 2021-12-18
    • 2016-05-31
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多