当groupBy处于spark状态时,转换变得缓慢

时间:2016-09-28 18:33:53

标签: scala apache-spark hive

我是新来的火花,我有一张表包含100 cr的数据。 表架构是:

  

id int
  名称 varchar
  dept_id int
  薪水加倍

我正在通过操作进行分组并在特定组中进行工资总和。

为此,我写了下面的代码:

val empData = sqlContext.sql("Select id ,name, dept_id , salary from emp")

val empData_map = empData.map(row => {
      Row(row.getInt(0), row.getString(1), row.getInt(2), row.getDouble(3))
    })

val finalResult =  empData_map.map({ final_data => 
      ((final_data.getInt(0), final_data.getString(1), final_data.getInt(2)), final_data.getDouble(3))
    }).reduceByKey((x, y) =>((x._1 + y._1)))

但我的问题是,但使用此功能表现缓慢。任何人都可以建议我,我正在使用正确的转换技术。

对于这种类型的转换,您还有其他选择(快速)吗?

注意:语法可能有误。

先谢谢

1 个答案:

答案 0 :(得分:0)

尝试以下:

import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val session = org.apache.spark.sql.SparkSession.builder.master("local").appName("reader").getOrCreate;
val df = session.read.format("com.databricks.spark.csv").option("header", "true").option("mode", "DROPMALFORMED").load("data");

df.createOrReplaceTempView("people")

val dept_sum=spark.sql("select dept_id,sum(salary) from people group by dept_id")