使用spark(Java)从两个csv获取数据

使用spark(Java)从两个csv获取数据,java,apache-spark,Java,Apache Spark,我有2个csv文件 Employee.csv和架构 EmpId Fname 1 John 2 Jack 3 Ram 第二个csv文件为 Leave.csv EmpId LeaveType Designation 1 Sick SE 1 Casual SE 2 Sick SE 3 Privilege

我有2个csv文件

Employee.csv
和架构

EmpId   Fname   
1       John    
2       Jack    
3       Ram
第二个csv文件为 Leave.csv

EmpId   LeaveType   Designation
1       Sick             SE
1       Casual           SE
2       Sick             SE
3       Privilege         M
1       Casual           SE
2       Privilege        SE
现在我希望json中的数据是

EmpID-1 
Sick : 2
Casual : 2
Privilege : 0

在Java中使用spark按列“LeaveType”分组并对其执行计数


我不熟悉Java语法,但如果您不想使用DataFrameAPI,可以在scala中执行类似操作

val rdd= sc.textfile("/path/to/leave.csv").map(_.split(",")).map(x=>((x(0),x(1),x(2)),1)).reduceByKey(_+_)
现在您需要使用一些外部API,如
GSON
,将此RDD的每个元素转换为所需的JSON格式。这个rdd的每个元素都是一个Tuple4,其中有(EmpId、leaveType、Designation、Countofleaves)


如果这有帮助,请告诉我,干杯。

您已经表达了自己的愿望,但忘了问问题。在这里,我们做作业,但更确切地说是帮助解决具体问题。我们可以不使用Spark SQL来做吗?是的,原理是一样的。不要使用列,而是使用键值对。请详细帮助我。我对Spark很陌生。你需要读点书。阅读Spark中解析CSV的相关内容:为了让计数按键减少:我不知道scala:P实际上我想要java本身的CSV,因为它们都是基于JVM的语言,我相信上面的代码片段会告诉你我在做什么。
val rdd= sc.textfile("/path/to/leave.csv").map(_.split(",")).map(x=>((x(0),x(1),x(2)),1)).reduceByKey(_+_)