首页 > 解决方案 > 数据框连接返回 pyspark 的空结果

问题描述

我正在尝试加入两个 Spark 数据帧(一个的来源是 Postgres 表,另一个是 CosmosDB 集合),但是尽管验证了它们都有加入的键,但我没有看到加入这个键的表.

我们分别称这些数据帧为 email_df 和 device_df:

email_df.where("id == '123456'").show()

+----------------+--------------------+
|              id|               email|
+----------------+--------------------+
|123456          |customer@gmail.com  |
+----------------+--------------------+

device_df.where("id == '123456'").show()

+----------------+--------------------+
|              id|         device_name|
+----------------+--------------------+
|123456          |Fizzbuzzer 2000     |
+----------------+--------------------+

如上所述,当使用 id 查询时,两个数据帧都返回一行。但是当我尝试加入他们时

email_df.join(device_df, "id", how='left').where(email_df.id == "123456").show()

看起来该操作没有加入 id == '123456' 的表(下面的 device_name 为空):

+----------------+--------------------+------------+
|            id  |               email| device_name|
+----------------+--------------------+------------+
|123456          |customer@gmail.com  | null       |
+----------------+--------------------+------------+

我很困惑,因为我没有看到与 email_df 一起加入的另一个基于 cosmosdb 的数据框存在这个问题。数据大小也不应该成为问题:email_df 有大约 1M 行,为了测试,device_df 只有 2 行(id 为“123456”的行)。我试过广播加入,但没有成功。对我来说有趣的是,小 device_df 默认有 79 个分区,但在加入之前将其合并为一个也没有效果。

运行 Databricks 集群版本 5.5 LTS / Spark 2.4.3

标签: apache-sparkpysparkazure-databricks

解决方案


请检查您在视觉上看不到的空间。这往往是罪魁祸首。


推荐阅读