Scala Spark GroupBy操作性能改进
我有一个如下的数据框,大约有10亿条记录,大约有100列Scala Spark GroupBy操作性能改进,scala,apache-spark,apache-spark-sql,rdd,Scala,Apache Spark,Apache Spark Sql,Rdd,我有一个如下的数据框,大约有10亿条记录,大约有100列 +---------+---------+------+------+------+ | Col1 | Col2 | Col3 | col4 | col5 | +---------+---------+------+------+------+ | Value 1 | Value 2 | 123 | 10.0 | sae | | Value 1 | Value 2 | 123 | 10.0 | ser | | Valu
+---------+---------+------+------+------+
| 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列的分区缓存整个数据。我在想,如果我们进行分区,数据将是该执行器的本地数据(不会发生太多的混乱)
代码流将是:
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()
你能发布更多的代码吗?这样我们就可以看到更多你所说的5个过滤器5个分组的意思了。另外,数据来自哪里?这些ORC表来自spark sql语句吗?我已经更新了查询您是否尝试过df.agg(countDistinct(“col1”)、counddinct(“cols2”)、…)?我尝试过df.agg(countDistinct(“col1”)、counddinct(“cols2”)、…),但这不适合我的情况。它只给出不同的值计数。但是我想要什么是不同的值和它的计数。你能发布更多的代码吗?这样我们就可以看到更多你所说的5个过滤器5个分组的意思。另外,数据来自哪里?这些ORC表来自spark sql语句吗?我已经更新了查询您是否尝试过df.agg(countDistinct(“col1”)、counddinct(“cols2”)、…)?我尝试过df.agg(countDistinct(“col1”)、counddinct(“cols2”)、…),但这不适合我的情况。它只给出不同的值计数。但是我想要什么是不同的值和它的计数。