【问题标题】:Spark Join Returning Null Values in ColumnsSpark Join 在列中返回 Null 值
【发布时间】:2016-04-27 08:54:29
【问题描述】:

我正在努力解决我认为非常简单的问题,但我不确定是否也会发生一些火花巫毒。

我有两张桌子,都非常小。 Table A 大约有 90K 行,Table B 大约有 2K 行。

表 A

A  B  C  D
===========
a1 b1 c1 d1
a1 b1 c2 d2
a1 b1 c3 d3
a2 b2 c1 d1
a2 b2 c2 d2
.
.
.

表 B

A  B  E  F
===========
a1 b1 e1 f1
a2 b2 e2 f2

我想要一张看起来像这样的桌子

结果表

A  B  C  D  E  F
=================
a1 b1 c1 d1 e1 f1
a1 b1 c2 d2 e1 f1
a2 b2 c1 d1 e2 f2
.
.
.

我有点松散,但我的想法是我想将行数较少的表与行数较多的表连接起来,并且在最终表中具有多个关联值是可以的。

这应该很简单:

table_a.join(table_b, table_a.a == table_b.a, table_a.b == table_b.b).select(..stuff..)

但是,对于Result Table几乎所有的结果值(应该有大约 90K 行,因为 Table A 有大约 90K 行),我在列 @ 中得到 null 值987654331@和F

当我只保存Table B 的结果时,我会看到所有的列和值。 当我只保存Table A 的结果时,我看到了所有的列和值。 (即我可以做纸笔连接)

奇怪的是,尽管在 Result Table 的列 EF 中有大约 89K 行有 null 值,但仍有一些值随机连接。

有谁知道发生了什么或者我该如何诊断?

【问题讨论】:

  • 对不起,我可能误读了您的问题。你是说 E 和 F 列大多是空的?如果是这样,您为什么对它们在连接中也大多是空的感到惊讶?您的代码看起来正确,所以我想知道您对数据的理解是否是问题所在。首先,您可能想知道有多少行来自 B 甚至连接到 A(可能通过在基础 Spark 中进行连接)。您可能还需要考虑您是否期望 outer join or an inner join 并执行相反的操作(请参阅连接文档字符串中的“how”参数)。
  • @nightingalen 很抱歉造成混乱。我是说Table ATable B 已满员。然后,当我加入它们时,我希望具有值的列(即EF)是null。我想将小表Table B 中的每一行与Table A 的每一行相关联,该表已完全填充。当我对一些模拟数据帧进行单个单元测试时,它可以工作,但是当我在生产环境中运行时,我得到了null 值。
  • 您的数据来自哪里?您是即时生成列EF,还是以某种方式与其他列不同?
  • @DavidGriffin 我即时生成EF。所以流程是:table_a_df = build_table_a(...) table_b_df = build_table_b(...) E 和 F 是从现有数据创建的 result_df = table_a_df.join(table_b_df, ....)
  • 任何时候你不能从一个小数据集和一个大数据集区分 r 结果,那是因为你的代码没有正确序列化 - 这就是我知道询问这些是否是动态的。创建这些列的代码中的某些内容未序列化。与加入无关

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

您是否尝试过在您的加入中使用 而不是 ==?

【讨论】:

  • 嗨 MatthewH,我正在 pyspark 中寻找替代 。我正在使用 1.6 版的 pyspark 并且使用 给我一个语法错误。你能帮忙吗?
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
相关资源
最近更新 更多