Apache spark 如何在spark数据集上使用group by
我正在使用Spark数据集(Spark 1.6.1版本)。 下面是我的代码Apache spark 如何在spark数据集上使用group by,apache-spark,dataset,apache-spark-dataset,Apache Spark,Dataset,Apache Spark Dataset,我正在使用Spark数据集(Spark 1.6.1版本)。 下面是我的代码 object App { val conf = new SparkConf() .setMaster("local") .setAppName("SparkETL") val sc = new SparkContext(conf) sc.setLogLevel("ERROR") val sqlContext = new SQLContext(sc); import sqlContext.implicits._ }
object App {
val conf = new SparkConf()
.setMaster("local")
.setAppName("SparkETL")
val sc = new SparkContext(conf)
sc.setLogLevel("ERROR")
val sqlContext = new SQLContext(sc);
import sqlContext.implicits._
}
override def readDataTable(tableName:String):DataFrame={
val dataFrame= App.sqlContext.read.jdbc(JDBC_URL, tableName, JDBC_PROP);
return dataFrame;
}
case class Student(stud_id , sname , saddress)
case class Student(classid, stud_id, name)
var tbl_student = JobSqlDAO.readDataTable("tbl_student").filter("stud_id = '" + studId + "'").as[Student].as("tbl_student")
var tbl_class_student = JobSqlDAO.readDataTable("tbl_class_student").as[StudentClass].as("tbl_class_student")
var result = tbl_class_student.joinWith(tbl_student, $"tbl_student.stud_id" === $"tbl_class_student.stud_id").as("ff")
现在我想在多个列上执行GROUPBY子句?
怎么做?
result.groupBy(u.\u 1.\u 1.created\u at)
我可以这样做吗?
如果是,则我无法通过如何在多个列上执行来查看结果作为一个组?如果我正确理解了您的要求,您最好的选择是在课堂上使用
reduceByKey
函数
函数的签名是def reduceByKey(func:,V)⇒ 五) :RDD[(K,V)]
它只是表示您使用一系列键/值对
让我解释一下工作流程:
result
)map
函数,可以将结果集拆分为一个元组,该元组包含两个子元组,其中包含构成键的字段和要聚合的字段(例如:result.map(row=>((row.key1,row.key2),(row.value1,row.value2))
)(V,V)=>V的函数直接使用reduceByKey
,该函数聚合值(例如:(agg:(Int,Int),val:(Int,Int))=>(agg.\u 1+val.\u 1,agg.\u 2+val.\u 2)
)
- 必须从聚合函数返回相同的值类型
- 您必须导入
才能自动使用pairrdFunctions实用程序org.apache.spark.SparkContext.\u
- 同样的道理也适用于
,您必须从起始RDD映射到一对groupBy
,但您没有聚合函数,因为您只是将值存储在一个seq中以供进一步计算RDD[K,V]
- 如果需要聚合的起始值(例如:0表示计数),请改用
函数foldByKey