【问题标题】:Compare Two dataframes add mis matched values as a new column in Spark比较两个数据框将不匹配的值添加为 Spark 中的新列
【发布时间】:2017-11-29 11:04:42
【问题描述】:

两条记录的区别是:

df1.except(df2)

得到这样的结果

如何比较两个数据框以及发生了什么变化,以及在哪里和哪一列发生了变化,将此值添加为一列。像这样的预期输出

【问题讨论】:

  • 你的意思是如何创建列remarks的内容?如果是这样,您能否完整显示该列的内容?
  • except 是一种减法运算。我建议在问题中添加一些示例,以帮助人们更好地理解和回答。
  • 让例如:,在旧数据中,名字,姓氏,地址与新数据不匹配。在备注栏中提供此信息。
    让例如:在旧数据james,新数据nitin。现在获取此信息,因为名字不匹配..同时比较第二列。在同一列中也提供此信息。

标签: apache-spark dataframe compare add difference


【解决方案1】:

在主键上加入两个数据框,稍后使用 with 列和 UDF 传递两个列值(旧值和新值),在 UDF 中比较数据并返回值,如果不相同。

val check = udf ( (old_val:String,new_val:String) => if (old_val == new_val) new_val else "")

df_check= df
   .withColumn("Check_Name",check(df.col("name"),df.col("new_name")))
   .withColumn("Check_Namelast",check(df.col("lastname"),df.col("new_lastname")))

或定义函数

            def fn(old_df:Dataframe,new_df:Dataframe) : Dataframe = 
            {
            val old_df_array = old_df.collect() //make df to array to loop thru
            val new_df_array = new_df.collect() //make df to array to loop thru
            var value_change : Array[String] = ""

            val count = old_df.count
            val row_count = old_df.coloumn
            val row_c = row.length
            val coloumn_name = old_df.coloumn

            for (i to count ) //loop thru all rows
            {
            var old = old_df_array.Map(x => x.split(","))
            var new = new_df_array.Map(x => x.split(","))
            for (j to row_c ) //loop thru all coloumn
            {
            if( old(j) !=  new(j) )
            {
            value_change  = value_change + coloumn_name(j) " has value changed" ///this will add all changes in one full row
            }
            //append to array 
            append j(0) //primary key
            append value_change //Remarks coloumn
            }
            }
            //convert array to df
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多