我加入了表,结果如下:
+----+----+----+----+----+----+----+----+
| Pk1| Pk2|Col2|Col3| Pk1| Pk3|Col1|Col3|
+----+----+----+----+----+----+----+----+
| a|null| 1| d|null|null|null|null|
|null|null|null|null| a|null| 1| g|
| b| 1| 2| c| b| 1|null|null|
| c| 1|null| o| c| 1| 3| s|
| d| 1| 4| n| d| 1|null| t|
| d| 1| 4| n| d| 1| 4| n|
| e| 1| 4| i|null|null|null|null|
|null|null|null|null| z| 1|null| i|
+----+----+----+----+----+----+----+----+
val join = source.alias("s").join(target.alias("t"), source(Pk1) === target(Pk1) && source(Pk2) === target(Pk3), "full")
join.collect().head.getAs[Any]("s.Pk1")
字符串
我想获取具有重复列名的值,但别名对我不起作用。我还可以做什么来获得值?
错误:
s.Pk1 does not exist. Available: Pk1, Pk2, Col2, Col3, Pk1, Pk3, Col1, Col3
型
1条答案
按热度按时间bq3bfh9z1#
如何使用源的pk1的计划输出:
字符串
这样做是因为AttributeReferences在计划中是唯一的,它们只是在输出中被简单的名称丢弃。alias函数只在使用sql连接时有帮助,在代码中,您直接使用源数据集来访问列,因此使用它是正确的。
至于这是不是个好主意。queryExecution的内容和可访问性在不同版本之间可能会有所不同,它并不完全是一个用户界面。您最好直接重命名字段:
型
这是较少的内部魔法和一个有点清晰的意图。