Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark GroupBy操作性能改进_Scala_Apache Spark_Apache Spark Sql_Rdd - Fatal编程技术网

Scala Spark GroupBy操作性能改进

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

我有一个如下的数据框,大约有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列的分区缓存整个数据。我在想,如果我们进行分区,数据将是该执行器的本地数据(不会发生太多的混乱)

代码流将是:

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”)、…),但这不适合我的情况。它只给出不同的值计数。但是我想要什么是不同的值和它的计数。