减去逻辑实现不适用于spark / scala

时间:2017-06-20 01:31:34

标签: scala hadoop apache-spark join spark-dataframe

Hive中的减去逻辑:

以下(Hive)查询将仅返回左侧表(Full_Table ft)中可用的记录,但不会同时返回两者。

Select ft.* from Full_Table ft  left join Stage_Table stg where stg.primary_key1 IS  null and stg.primary_key2 IS null

我尝试使用以下方法在spark / scala中实现相同的操作(同时支持主键和复合键),但是联接的结果集没有来自右表的column ,因为无法在连接的结果集中应用stg.primary_key2 IS null条件。

ft.join(stg,usingColumns, “left_outer”)  // used seq to support composite key column join

请建议我如何在spark scala中实现减去逻辑。

谢谢, Saravanan https://www.linkedin.com/in/saravanan303/

1 个答案:

答案 0 :(得分:0)

如果您的表格具有相同的列,则可以使用except中的DataSet方法:

fullTable.except(stageTable)

如果他们没有,但您只对两个表中存在的列子集感兴趣,则可以先使用select转换选择这些列,然后使用except

val fullTableSelectedColumns = fullTable.select(c1,c2,c3)
val stageTableSelectedColumns = stageTable.select(c1,c2,c3)

fullTableSelectedColumns.except(stageTableSelectedColumns)

在其他情况下,您可以使用joinfilter转换:

fullTable
    .join(stageTable, fullTable("primary_key") === stageTable("primary_key"), "left")
    .filter(stageTable("primary_key1").isNotNull)