Параллельные запросы API с использованием Spark и Scala - PullRequest
0 голосов
/ 07 января 2019

Я использую Spark 2.4.0 и Scala 2.11. У меня есть набор данных [Users], когда Users состоит из: (страна, id, URL). Я хочу сгруппировать этот DS по стране, и для каждой группы, сделать запрос на URL, чтобы получить подробную информацию о пользователях из этой страны.

Как лучше всего это сделать? используя mapPartitions? foreachPartition? Спасибо

1 Ответ

0 голосов
/ 07 января 2019

mapPartitions и foreachPartitition были для СДР. Теперь набор данных также может использовать mapPartitions.

Как правило, вы должны использовать Spark DSL- или Spark SQL API на Dataframes или DataSets. Они используют 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, вы можете использовать mapPartitions на DS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...