我在pyspark中做了一个简单的左-外连接,它没有给出正确的结果。请看下面。值5(在a列中)介于1(b列)和10(c列)之间,这就是为什么b和c应该在第一行的输出表中。但我得到了空值。我在3种不同的rdbms 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|
+---+----+----+----+
2条答案
按热度按时间lsmepo6l1#
语法左连接此处输入链接说明
也许对你有帮助
5uzkadbs2#
问题是spark将列作为字符串加载,而不是int。spark对字符串进行了>=和<=比较,这就是为什么结果不一致的原因。将a、b、c列转换为int解决了这个问题。