如何在Spark DataFrame中按查询分组?

时间:2015-10-10 20:00:17

标签: apache-spark hive apache-spark-sql spark-dataframe

您好我有一个Spark作业,它通过查询使用以下组。我知道group by是邪恶的,但在我的用例中我无法避免它。我尝试使用DataFramehiveContext.sql()两者都使用它,但是两者都洗涤了大量数据并且非常慢,一次查询大约需要5分钟。我已经看到一个分组逐级读取20 GB并随机写入10 GB。我有大约8个字段按字段分组传入

sourceFrame.select("blabla").groupby("col1","col2","col3",..."col8").agg("bla bla"); 

OR

hiveContext.sql("insert into table partitions bla bla group by "col1","col2","col3",..."col8""); 

我已经尝试了几乎所有调整参数,如钨,lz4,更多spark.shuffle.memoryFraction大约0.6。 Spark UI中的大部分时间都在等待shuffle阅读并在那里挂起甚至几个小时。我正在使用Spark 1.4.0,请提前感谢。

1 个答案:

答案 0 :(得分:1)

reduceByKey是groupBy的替代选项,但您需要从dataframe转换为RDD。我有类似的问题,但我使用df.rdd解决,然后使用reduceByKey