我是scala spark的新手。我有一个像下面这样的Dataframe,我需要根据一个组id将数据分成不同的数据块,并独立地并行处理它们。
+----+-------+-----+-------+
|user|feature|value|groupID
+----+-------+-----+-------+
| 1| 100| 1| A|
| 2| 20B| 0| B|
| 3| 30A| 1| B|
| 4| 40A| 1| B|
| 5| 50A| 1| A|
| 6| 10A| 0| B|
| 7| 200| 1| A|
| 8| 30B| 1| B|
| 9| 400| 0| A|
| 10| 50C| 0| A|
+----+-------+-----+-------+
第一步我需要分裂它有两个不同的df像这样的:我可以为这个用户一个过滤器。但我不确定(由于它们将产生大量不同的Dataframe),我是否应该将它们作为parquet保存到adl中,或者将它们保存在内存中。
+----+-------+-----+-------+
|user|feature|value|groupID
+----+-------+-----+-------+
| 1| 100| 1| A|
| 5| 50A| 1| A|
| 7| 200| 1| A|
| 9| 400| 0| A|
| 10| 50C| 0| A|
+----+-------+-----+-------+
+----+-------+-----+-------+
|user|feature|value|groupID
+----+-------+-----+-------+
| 2| 20B| 0| B|
| 3| 30A| 1| B|
| 4| 40A| 1| B|
| 6| 10A| 0| B|
| 8| 30B| 1| B|
+----+-------+-----+-------+
两步并行独立处理每个Dataframe,得到独立处理的Dataframe。
给出一些背景:
groupid的数量将很高,因此它们不能硬编码。
理想情况下,每个Dataframe的处理将并行进行。
我想了解一下如何继续:我已经看到了.par.foreach(但我不清楚如何将其应用于动态数目的Dataframe,以及如何独立存储它们,也不清楚是否是最有效的方法)
1条答案
按热度按时间gz5pxeao1#
检查以下代码。
得到
distinct
dataframe中的groupid值。使用
.par
用于并行处理。你需要把你的逻辑加进去map
.