Spark Group通过操作性能改进

时间:2019-10-02 15:16:14

标签: scala apache-spark apache-spark-sql rdd

我有一个类似下面的DataFrame,大约有10亿条记录,大约有100列。

+---------+---------+------+------+------+
|  Col1   |  Col2   | Col3 | col4 | col5 |
+---------+---------+------+------+------+
| Value 1 | Value 2 |  123 | 10.0 | sae  |
| Value 1 | Value 2 |  123 | 10.0 | ser  |
| Value 1 | Value 2 |  123 | 10.0 | wer  |
+---------+---------+------+------+------+

我必须对100列中的5列应用groupBy操作,如下所示。

df.groupBy("col1").count()
df.groupBy("col2").count()
df.groupBy("col3").count()
df.groupBy("col4").count()
df.groupBy("col5").count()

由于这是一项昂贵的操作,需要太多改组,因此需要花费更多时间。要将groupBy操作本身应用5次,将花费更多时间。

但是对于我来说,我必须对每个过滤器应用这5个groupBy操作。 就像如果有5个过滤器,我必须在5 * 5时间之前应用groupBy操作

我正在寻找一种解决方案,通过使用这5列的分区缓存整个数据来解决此问题。我在想,如果我们进行分区,数据将是该执行器的本地数据(不会发生太多的混乱)。

CodeWise流将为:

val df = spark.read.format("parquet").load("file://location")

val 1stdf = df.filter("$col1" == "a")
df.groupBy("col1").count()
df.groupBy("col2").count()
df.groupBy("col3").count()
df.groupBy("col4").count()
df.groupBy("col5").count()

val 2nddf = df.filter("$col2" == "abc")
df.groupBy("col1").count()
df.groupBy("col2").count()
df.groupBy("col3").count()
df.groupBy("col4").count()
df.groupBy("col5").count()

val 3rddf = df.filter("$col3" == "abdc")
df.groupBy("col1").count()
df.groupBy("col2").count()
df.groupBy("col3").count()
df.groupBy("col4").count()
df.groupBy("col5").count()



0 个答案:

没有答案