Scala 如何仅使用Dataset API连接两个数据集
我正在努力将连接其他两个数据集所产生的数据集展平。 下面是我的代码:Scala 如何仅使用Dataset API连接两个数据集,scala,apache-spark,apache-spark-dataset,Scala,Apache Spark,Apache Spark Dataset,我正在努力将连接其他两个数据集所产生的数据集展平。 下面是我的代码: 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
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]
如果您知道如何在不使用DataFrameAPI的情况下实现这一点,我希望完全使用DataSetaAPI。
非常感谢你的帮助。
最好的问候使用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|
+--------+------+--------+
在这个解决方案中,您更倾向于使用DataFrameAPI。我的目标是在datset API中仅在显示输出中缺少一列,想知道为什么DS和DF的对比如此之快?@thebluephantom哪个列id?我删除了id列。我想将两个数据集连接在不同的列上,因此其中TypeA.ColumnA==TypeB.ColumnB。Spark在一个数据集上提供了JoinWith函数,我认为这样做是正确的,但是该函数没有文档记录,并且标记为“实验性的”。注:实验性