我正在努力拼合通过合并其他两个数据集而得到的数据集。 下面是我的代码:
val family = Seq(
Person(0, "Agata", 0),
Person(1, "Iweta", 0),
Person(2, "Patryk", 2),
Person(3, "Maksym", 0)).toDS
val cities = Seq(
City(0, "Warsaw"),
City(1, "Washington"),
City(2, "Sopot")).toDS
然后加入:
val joined = family.joinWith(cities, family("cityId") ===cities("id"),"crossjoin")
获得的结果是:
joined: org.apache.spark.sql.Dataset[(Person, City)]
_1| _2|
[0,Agata,0]|[0,Warsaw]| |
[1,Iweta,0]|[0,Warsaw]| |
[2,Patryk,2]| [2,Sopot]| |
[3,Maksym,0]|[0,Warsaw] |
我想弄平它并获得以下数据集:
val output: Dataset=
[0,Agata,0,Warsaw]|
[1,Iweta,0,Warsaw]|
[2,Patryk,2,Sopot]|
[3,Maksym,0,Warsaw]
任何不使用dataframe API怎么做的想法,我希望它完全通过Dataset API完成。 非常感谢你的帮助。 最好的问候
答案 0 :(得分:0)
使用join自身,您将获得相同的输出。
family.join(cities, family("cityId")===cities("id")).drop("id")
示例输出:
+--------+------+--------+
|cityName|cityId|cityName|
+--------+------+--------+
| Agata| 0| Warsaw|
| Iweta| 0| Warsaw|
| Patryk| 2| Sopot|
| Maksym| 0| Warsaw|
+--------+------+--------+
答案 1 :(得分:0)
...
val joined = family.join(cities).where(family("cityid") === cities("id")).drop("id") // adding this means use the DF
joined.show
实验方面意味着尚未正式考虑使用joinWith。
DF和DS彼此接近,所以没关系。我相信实际上不可能实现您想要的一切。
他们也说Dataset [Row]又名DataFrame。