比较spark中两个数据框中的列
Comparing columns in two data frame in spark
我有两个数据框,它们都包含不同数量的列。
我需要比较它们之间的三个字段以检查它们是否相等。
我尝试了以下方法,但它不起作用。
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")
,此 returns 列而不是实际值,因此条件变为错误。
此外,请解释 df_table_stats.select("rec_cnt")
和 df_table_stats("rec_cnt")
之间的区别。
谢谢。
根据我的评论,您使用的语法是简单的列引用,它们实际上不是 return 数据。假设您 必须 为此使用 Spark,您需要一种实际上 return 数据的方法,在 Spark 中称为 action
。对于这种情况,您可以使用 take
到 return 第一个 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 使用一个简单的 JDBC 库,例如 ScalikeJDBC 来执行这些查询并捕获结果中的原语。
根据您的条件使用 sql 和 inner join 两个 df 。
我有两个数据框,它们都包含不同数量的列。 我需要比较它们之间的三个字段以检查它们是否相等。
我尝试了以下方法,但它不起作用。
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")
,此 returns 列而不是实际值,因此条件变为错误。
此外,请解释 df_table_stats.select("rec_cnt")
和 df_table_stats("rec_cnt")
之间的区别。
谢谢。
根据我的评论,您使用的语法是简单的列引用,它们实际上不是 return 数据。假设您 必须 为此使用 Spark,您需要一种实际上 return 数据的方法,在 Spark 中称为 action
。对于这种情况,您可以使用 take
到 return 第一个 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 使用一个简单的 JDBC 库,例如 ScalikeJDBC 来执行这些查询并捕获结果中的原语。
根据您的条件使用 sql 和 inner join 两个 df 。