我有以下代码:
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 列,即使第一个语句的相等性测试在没有它的情况下运行良好(即没有要修剪的空格)。
暂无答案!
目前还没有任何答案,快来回答吧!