spark drop duplicates删除所有行

3b6akqbq  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(186)

我有以下代码:

val df = spark.read
        .format("com.microsoft.sqlserver.jdbc.spark")
        .option("url", url) 
        .option("dbtable", table)
        .option("user", username)
        .option("password", password).load()

df.where(col("code") === "XFH").show()
df.dropDuplicates("code").where(col("code") === "XFH").show()

我的数据有两个条目 code == XFH ,因此我希望第一次显示返回两行,第二次显示返回一行。然而,我得到的第一个两个,然后第二个零(即,它是删除两个重复)。
如果我尝试下面的方法,它会像预期的那样工作,所以我相信这与拥有多个列有关(尽管我无法用虚拟数据集重现这个问题):

df.select("code").dropDuplicates("code").where(col("acf_code") === "code").show()

你知道我做错了什么,以及如何修复它,使我的Dataframe只包含一个xfh示例吗?
更新:正如@gamingfilix所建议的,我也尝试过分成不同的阶段。

val dedupDf = df.dropDuplicates("code")

println(df.count())
// Prints 694
println(dedupDf.count())
// Prints 692

只有一行是重复的,所以看起来它仍在删除这两行。
更新2:
看来不是 dropDuplicates 这就是问题所在,但还有一些奇怪的事情正在发生。

df.where(col("code") === "XFH").show()
// Returns 2 results

df.dropDuplicates("code").where(col("code") === "XFH").show()
// Returns 0 results

df.dropDuplicates("code").where(trim(col("code")) === "XFH").show()
// Returns 1 result, as desired

我真的不明白为什么我需要在trim中 Package 列,即使第一个语句的相等性测试在没有它的情况下运行良好(即没有要修剪的空格)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题