我是新来的火花,我有一张表包含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)))
但我的问题是,但使用此功能表现缓慢。任何人都可以建议我,我正在使用正确的转换技术。
对于这种类型的转换,您还有其他选择(快速)吗?
注意:语法可能有误。
先谢谢
答案 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")