【问题标题】:How do I Compare 2 Spark Dataframes in Databricks如何比较 Databricks 中的 2 个 Spark 数据帧
【发布时间】:2021-08-14 00:42:38
【问题描述】:

我有以下 spark 数据框。一个来自文本文件,另一个来自 Databricks 中的 Spark 表:

尽管数据完全相同,但以下代码报告了差异。我希望 df3 为空:

table_df = spark.sql("select * from db.table1")
file_df = spark.read.format("csv").load("my_file.txt", header = False, delimiter = '|')
file_df = file_df.toPandas()
table_df = table_df.toPandas()
df3=table_df.eq(file_df)
print(df3.shape[0])
  • 在比较之前我需要订购数据吗? - 如果是这样,我该怎么做?
  • 我看不到上面的连接是在哪里完成的。它将如何匹配行? [ID] 和 [Account] 是主键吗?
  • 以上方法是比较 2 个数据帧的最佳方法吗?

这是数据 - 其中 [ID] 和 [Account] 是主键

【问题讨论】:

    标签: python pandas apache-spark pyspark databricks


    【解决方案1】:

    我通常用来比较两个数据帧的方法是使用内部连接并查看计数是否匹配,或者使用subtract 来查看它们之间是否有任何不同

    df1 = create_df(
        data=[
            ('Avery Bradley', 25.0, 7730337.0),
            ('Jae Crowder', 25.0, 6796117.0),
        ],
        schema = ['name', 'age', 'salary']
    )
    +-------------+----+---------+
    |         name| age|   salary|
    +-------------+----+---------+
    |Avery Bradley|25.0|7730337.0| <<< 25
    |  Jae Crowder|25.0|6796117.0|
    +-------------+----+---------+
    
    df2 = create_df(
        data=[
            ('Avery Bradley', 24.0, 7730337.0),
            ('Jae Crowder', 25.0, 6796117.0),
        ],
        schema = ['name', 'age', 'salary']
    )
    +-------------+----+---------+
    |         name| age|   salary|
    +-------------+----+---------+
    |Avery Bradley|24.0|7730337.0| <<< 24
    |  Jae Crowder|25.0|6796117.0|
    +-------------+----+---------+
    
    # Solution #1
    df1.subtract(df2).show()
    +-------------+----+---------+
    |         name| age|   salary|
    +-------------+----+---------+
    |Avery Bradley|25.0|7730337.0|
    +-------------+----+---------+
    
    # Solution #2
    df1.join(df2, on=df1.columns).count()
    # 1 <<< while df1.count() = 2
    

    【讨论】:

    • 感谢您的及时回复。请问有示例代码吗?
    • 我使用了解决方案 #1。现在我看到我的代码中的以下行将 ID 转换为十进制,并且与表中同一列的整数不匹配:file_df = spark.read.format("csv").load(" my_file.txt", header = False, delimiter = '|')
    • 从 csv 读取时,您始终可以强制模式
    • 您可以查看this答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多