【发布时间】:2021-03-05 21:58:31
【问题描述】:
我在 PySpark 中做一个简单的左外连接,但它没有给出正确的结果。请看下文。值 5(在 A 列中)介于 1(B 列)和 10(C 列)之间,这就是为什么 B 和 C 应该在第一行的输出表中。但我得到了空值。我已经在 3 种不同的 RDBM MS SQL、PostGres 和 SQLite 中进行了尝试,所有这些都给出了正确的结果。 Spark 中可能存在的错误??
Table x
+---+
| A|
+---+
| 5|
| 15|
| 20|
| 50|
+---+
Table y
+----+----+---+
| B| C| D|
+----+----+---+
| 1| 10|abc|
| 21| 30|xyz|
|null|null| mn|
| 11| 20| o|
+----+----+---+
SELECT x.a, y.b, y.c, y.d
FROM x LEFT OUTER JOIN
y
ON x.a >= y.b AND x.a <= y.c
+---+----+----+----+
| a| b| c| d|
+---+----+----+----+
| 5|null|null|null|
| 15| 11| 20| o|
| 20| 11| 20| o|
| 50|null|null|null|
+---+----+----+----+
【问题讨论】:
-
你能创建小提琴吗,例如dbfiddle.uk
-
这是正确的输出:dbfiddle.uk/…
-
我的第一个猜测是Spark中的数据类型是字符串而不是数字。
-
不错的猜测,但不是,我确保将 A、B、C 列强制转换为 int 并给出完全相同的结果。
-
不能用整数类型重现,但可以用字符串类型重现。
标签: sql apache-spark pyspark apache-spark-sql