apache-spark - 数据框连接返回 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
解决方案
请检查您在视觉上看不到的空间。这往往是罪魁祸首。
推荐阅读
- django - 如何在 django 中使用嵌套序列化程序更新外键字段
- python - 如何使用python为链表创建指针
- javascript - d3 - 搜索树并突出显示 d3 v5 的节点和路径
- asp.net - 如何在 Angular 项目中执行命令 ng build --prod 时修复此错误?
- javascript - 使用crypto-js对文件进行AES加密和解密
- python-3.x - 如何通过类Tensorflow对象检测获得对象的预测百分比
- django - Pycharm社区版无法加载facet Django,但专业版没有错误
- javascript - for循环中的ajax帖子
- php - Laravel Botman 问题 - 嵌套在 botman 类中后无法调用同一类的函数
- python - 如何为 DCP 训练准备我自己的数据集?