2016-09-28 64 views
0

我是新来的火花,我有一张桌子里面有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我正在使用正确的转换技术或不。

对于此类转换,您是否有其他选项(快速)?

注意:语法可能是错误的。

由于提前

+0

不知道为什么你把东西放进'Row'再出一次。另外,我会推荐数据集。 – Reactormonk

+0

@Reactormonk所以你能帮我解决问题,我怎样才能使用数据集进行这种类型的转换。 – Darshan

+0

哪个Spark版本? – Reactormonk

回答

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