【问题标题】:Get columns from two dataframes where values differ从值不同的两个数据框中获取列
【发布时间】:2020-03-23 05:04:27
【问题描述】:

我有两个几乎相同的 Pyspark 数据框:相同的行数和 row_id,相同的架构,但每行的某些列的值不同。

我想确定每一行的那些列。

例子:

数据框 A

id  fname   lname   email
1   Michael Jackson mj@yahoo.com
2   Roger   Moore   rm@rocketmail.com
3   Angela  Merkel  am@dw.de

数据框 B

id  fname   lname   email
1   Michael Jordan  mj@yahoo.com
2   Gordon  Moore   rm@rocketmail.com
3   Angela  Markle  am@dw.com

预期的输出是字典列表:

[ 
  {"1": ["lname"]}, 
  {"2": ["fname"] }, 
  {"3": ["lname", "email"] }
]

【问题讨论】:

    标签: python pyspark apache-spark-sql pyspark-sql


    【解决方案1】:

    这是一个更通用的答案,使用 RDD 转换:

    column_names = a_df.schema.names
    
    def compare(row):
        diff_columns = []
        for col in column_names:
            if row[1][0][col] != row[1][1][col]:
                diff_columns.append(col)
    
        return ( row[0],  { row[0]: diff_columns } )
    
    # convert to Pair RDD for joining
    a_pair_rdd = a_df.rdd.map(lambda x: (x['id'], x))
    b_pair_rdd = b_df.rdd.map(lambda y: (y['id'], y))
    joined_rdd = a_pair_rdd.join(b_pair_rdd)
    
    output = joined_rdd.map(compare).map(lambda pair: pair[1]).collect()
    

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多