Python 3.x 比较PySpark中的文件

Python 3.x 比较PySpark中的文件,python-3.x,apache-spark,pyspark,user-defined-functions,difference,Python 3.x,Apache Spark,Pyspark,User Defined Functions,Difference,我正在与PySpark合作,我需要比较两个文件的内容,以进行diffcheck。 因此,我将测试分为两部分: 我在两个文件之间建立连接列,并检查记录是否相同 我从每个文件中获取唯一的列,并保存它们(以手动测试) 第一步是采取行动 joined_columns = set(tbl1.columns).intersection(set(tbl2.columns)) joined_columns_str = str(joined_columns)[1:-1].replace("'"

我正在与PySpark合作,我需要比较两个文件的内容,以进行diffcheck。 因此,我将测试分为两部分:

  • 我在两个文件之间建立连接列,并检查记录是否相同
  • 我从每个文件中获取唯一的列,并保存它们(以手动测试)
  • 第一步是采取行动

    joined_columns = set(tbl1.columns).intersection(set(tbl2.columns))
    joined_columns_str = str(joined_columns)[1:-1].replace("'", "")
    
    tbl1_set = spark.sql("SELECT " + joined_columns_str + " FROM tbl1")
    tbl2_set = spark.sql("SELECT " + joined_columns_str + " FROM tbl2")
    
    sql = "SELECT * FROM tbl1_set " \
              "EXCEPT " \
              "SELECT * FROM tbl2_set "
    different_records = spark.sql(sql)
    
    但是,在这些文件中,我有映射列-因此我得到以下错误:

    org.apache.spark.sql.AnalysisException: Cannot have map type columns in DataFrame which calls set operations(intersect, except, etc.)
    
    有人知道如何解决这个问题,只得到不完全相同的记录吗? 我曾想过使用udf,但在“选择*”上找不到如何使用它,只有在引用特定字段时

    任何帮助都将不胜感激


    谢谢

    你试过分解地图吗?您将有键/值列,您可以比较映射的每个元素。嗨@Steven,要这样做,我需要处理特定的列,不是吗。。。?如果一列是地图,我如何才能分解它?