Преобразование становится медленным в то время как groupBy в spark

Я новичок в spark, у меня есть одна таблица содержит 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)))

Но мой вопрос в том, но производительность медленная с помощью этого. Может ли кто-нибудь предложить мне, Wheather я использую правильную технику трансформации или нет.

Есть ли у вас другие опции(Fast) для этого типа преобразования.

Примечание: синтаксис может быть неправильным.

Спасибо заранее

1 ответ

  1. Попробуйте ниже:

    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")