【问题标题】:How to retrieve column value by passing another column value with IN clause in spark如何通过在火花中使用 IN 子句传递另一个列值来检索列值
【发布时间】:2021-05-28 23:25:27
【问题描述】:

我有一个场景,通过使用来自同一 DataFrame 的另一列通过 where 条件从 DataFrame 读取一列,并且该值作为 IN 条件传递以从另一个 DataFrame 中选择相同的值,以及如何在 spark DataFrame 中实现。

在 SQL 中是这样的:

select distinct(A.date) from table A where A.key in (select B.key from table B where cond='D');

我尝试如下:

val Bkey: DataFrame = b_df.filter(col("cond")==="D").select(col("key"))

我在 a_df DataFrame 中有表 A 数据,在 b_df DataFrame 中有表 B 数据。如何将变量 Bkey 值传递给外部查询并在 Spark 中实现?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    你可以做一个半连接:

    val result = a_df.join(b_df.filter(col("cond")==="D"), Seq("key"), "left_semi").select("date").distinct()
    

    【讨论】:

    • 非常感谢您的回复和建议,如果“key”列在表 A 和 B 中有不同的名称怎么办?例如,表 A 具有名称作为键,但表 B 具有 tkey 但在两个表中具有相同的值。我们可以有 Seq("key", "tkey') 吗?
    • 然后使用 a_df.key === b_df.tkey 而不是 Seq("key")
    • val 结果 = a_df.join(b_df.filter(col("cond")==="D"),a_df.key === b_df.tkey , "left_semi").select( "date").distinct() 这个理解正确吗??
    • 看起来不错,可以测试一下
    • 非常感谢。我会测试并返回结果。
    猜你喜欢
    • 2014-07-18
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多