比较spark中两个Dataframe中的列

7fhtutme  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(601)

我有两个Dataframe,它们都包含不同数量的列。我需要比较它们之间的三个字段来检查它们是否相等。
我试着遵循这个方法,但不起作用。

if(df_table_stats("rec_cnt").equals(df_aud("REC_CNT")) || df_table_stats("hashcount").equals(df_aud("HASH_CNT")) || round(df_table_stats("hashsum"),0).equals(round(df_aud("HASH_TTL"),0)))
    {
        println("Job executed succefully")
    }
``` `df_table_stats("rec_cnt")` ,则返回列而不是实际值,因此条件变为false。
另外,请解释一下 `df_table_stats.select("rec_cnt")` 以及 `df_table_stats("rec_cnt")` .
谢谢。
lnvxswe2

lnvxswe21#

根据我的评论,您使用的语法是简单的列引用,它们实际上并不返回数据。假设您必须使用spark,那么您需要一个实际返回数据的方法,在spark中称为 action . 在这种情况下,你可以使用 take 返回第一个 Row 并提取所需列:

val tableStatsRow: Row = df_table_stats.take(1).head
val audRow: Row = df_aud.take(1).head

val tableStatsRecCount = tableStatsRow.getAs[Int]("rec_cnt")
val audRecCount = audRow.getAs[Int]("REC_CNT")

//repeat for the other values you need to capture

然而,如果这是你使用它的全部目的,spark绝对是杀伤力过大。您可以为scala(如scalikejdbc)使用一个简单的jdbc库来执行这些查询并捕获结果中的原语。

gkl3eglg

gkl3eglg2#

根据您的条件,使用sql和inner连接这两个df。

相关问题