繁体   English   中英

使用 Spark 和 Scala 的并行 API 请求

[英]Parallel API requests using Spark and scala

我使用的是 Spark 2.4.0 和 Scala 2.11。 我有 Dataset[Users] ,当用户包括:(country,id,url)。 我想按国家/地区对此 DS 进行分组,并为每个组请求 URL,以获取有关该国家/地区用户的详细信息。

最好的方法是什么? 使用地图分区? foreach分区? 谢谢

mapPartitions 和 foreachPartitition 用于 RDD。 现在 Dataset 也可以使用 mapPartitions。

通常,您应该在数据帧或数据集上使用 Spark DSL 或 Spark SQL API。 这些使用 Catalyst Optimizer 意味着更少的思考,它也可以在并行模式下工作。 Dataframe 的一个例子是,类似于 DataSet:

import org.apache.spark.sql.functions._
import spark.implicits._
//import org.apache.spark.sql._
//import org.apache.spark.sql.types._ 

val df = Seq(
 ("green","y", 4),
 ("blue","n", 7),
 ("red","y", 7),
 ("yellow","y", 7),
 ("cyan","y", 7)
          ).toDF("colour", "status", "freq")

val df2 = df.where("status = 'y'") 
            .select($"freq", $"colour")
            .groupBy("freq")
            .agg(collect_list($"colour"))

df2.show(false)

返回:

+----+--------------------+
|freq|collect_list(colour)|
+----+--------------------+
|4   |[green]             |
|7   |[red, yellow, cyan] |
+----+--------------------+

但是对于 RDD,您可以在 DS 上使用 mapPartitions。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM