数据框a:
SN Hash_id Name
111 11ww11 Airtel
222 null Idea
数据框b:
SN Hash_id Name
333 null BSNL
444 22ee11 Vodafone
按列名称对这些数据框执行UnionAll,如下所示:
def unionByName(a: DataFrame, b: DataFrame): DataFrame = {
val columns = a.columns.toSet.intersect(b.columns.toSet).map(col).toSeq
a.select(columns: _*).unionAll(b.select(columns: _*))
}
结果是:数据框c
SN Hash_id Name
111 11ww11 Airtel
222 null Idea
333 null BSNL
444 22ee11 Vodafone
对数据框c。
执行过滤val withHashDF = c.where(c("Hash_id").isNotNull)
val withoutHashDF = c.where(c("Hash_id").isNull)
withHashDF
的结果是:它仅为数据框a
111 11ww11 Airtel
在存在哈希id的地方缺少数据框b的记录:
444 22ee11 Vodafone
withoutHashDF
的结果是:
222 null Idea
BSNL 333 null
null 222 Idea
在此DF中,列值不是按列名称计算,计数是3,它应该只有2.从数据框“a”行重复。
答案 0 :(得分:0)
如果Dataframe(Unionall)中存在重复项,则会为filter或where子句提供意外结果。一旦通过使用distinct方法消除重复项,结果就像预期的那样。