使用 Spark 和 scala 的并行 API 请求



我正在使用Spark 2.4.0和Scala 2.11。我有数据集[用户],当用户由:(国家,id,url)组成时。我想按国家/地区对此 DS 进行分组,对于每个组,请求 URL ,以获取有关来自该国家/地区的用户的详细信息。

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

mapPartitions 和 foreachPartitition 用于 RDD。现在数据集也可以使用mapPartitions。

通常,您应该在数据帧或数据集上使用Spark DSL或Spark SQL API。这些使用催化剂优化器意味着更少的思考,它也可以在并行模式下工作。数据帧的示例类似于数据集:

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。

相关内容

  • 没有找到相关文章

最新更新