【问题标题】:Comparing two data frame with different number of columns in scala在scala中比较两个具有不同列数的数据框
【发布时间】:2022-01-27 03:47:59
【问题描述】:

我有两个数据框 df1 和 df2。

df1 有 174 列,df2 有 175 列。

我怎样才能找到哪一列是多余的?

【问题讨论】:

标签: dataframe scala apache-spark databricks


【解决方案1】:

只需将列列表转换为集合,并对这些集合使用diff 操作,如下所示:

df2.columns.toSet.diff(df1.columns.toSet)

请注意,比较的顺序很重要,例如,df1.columns.toSet.diff(df2.columns.toSet) 不会产生所需的差异。如果你想让差异独立于位置,你可以使用这样的东西:

df2.columns.toSet.diff(df1.columns.toSet).union(
  df1.columns.toSet.diff(df2.columns.toSet))

【讨论】:

    【解决方案2】:

    在pyspark,你可以使用下面的逻辑。

    dept = [("Finance",10), 
            ("Marketing",20), 
            ("Sales",30), 
            ("IT",40) 
          ]
    deptColumns = ["dept_name","dept_id"]
    
    dept1 = [("Finance",10,'999'), 
            ("Marketing",20,'999'), 
            ("Sales",30,'999'), 
            ("IT",40,'999') 
          ]
    deptColumns1 = ["dept_name","dept_id","extracol"]
    
    deptDF = spark.createDataFrame(data=dept, schema = deptColumns)
    dept1DF = spark.createDataFrame(data=dept1, schema = deptColumns1)
    deptDF_columns=deptDF.schema.names
    dept1DF_columns=dept1DF.schema.names
    
    list_difference = []
    for item in dept1DF_columns:
      if item not in deptDF_columns:
         list_difference.append(item)
    
    print(list_difference)
    

    测试代码:

    【讨论】:

    • 您还没有考虑deptDF_columns 有一个额外列的场景。 list_difference = set(deptDF_columns) ^ set(dept1DF_columns) 应该会给你两个列表的区别。
    • 感谢您的检查。我也考虑过这种情况。你能检查一下截图中的第 13 行吗
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多