如果没有重复的列,我们如何合并2个Dataframe
a.show()
+-----+-------------------+--------+------+
| Name| LastTime|Duration|Status|
+-----+-------------------+--------+------+
| Bob|2015-04-23 12:33:00| 1|logout|
|Alice|2015-04-20 12:33:00| 5| login|
+-----+-------------------+--------+------+
b.show()
+-----+-------------------+--------+------+
| Name| LastTime|Duration|Status|
+-----+-------------------+--------+------+
| Bob|2015-04-24 00:33:00| 1|login |
+-----+-------------------+--------+------+
我想通过使用dataframea中的整个数据来形成一个新的dataframe,但是使用dataframeb中的数据来更新行
+-----+-------------------+--------+------+
| Name| LastTime|Duration|Status|
+-----+-------------------+--------+------+
| Bob|2015-04-24 00:33:00| 1|login |
|Alice|2015-04-20 12:33:00| 5| login|
+-----+-------------------+--------+------+
我能够在scala中加入并形成Dataframe。但不能用java做。
DataFrame f=a.join(b,a.col("Name").equalsTo(b.col("Name")).and a.col("LastTime).equalsTo(b.col("LastTime).and(a.col("Duration").equalsTo(b.col("Duration"),"outer")
在这样执行join时,我得到了重复的列。
4条答案
按热度按时间wrrgggsh1#
根据这个答案,一系列的列名在scala中解决了这个问题。
汉斯,把java列表转换成scala-seq应该由你来做。下面是您更正的示例代码:
uqdfh47h2#
正确的方法是:(测试)
camsedfj3#
我认为我们可以通过sparksql来尝试,也可以通过java来执行。
可以根据用例更新连接条件
mrphzbgm4#
可以执行leftsemi连接(“leftsemi”),以避免数据集中的重复列。
请参见此处以供参考:http://www.techburps.com/misc/apache-spark-dataset-joins-in-java/129