Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何仅使用Dataset API连接两个数据集_Scala_Apache Spark_Apache Spark Dataset - Fatal编程技术网

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函数,我认为这样做是正确的,但是该函数没有文档记录,并且标记为“实验性的”。注:实验性