java - 按列分组和排序 csv 文件 spark
问题描述
下面是我正在处理的 csv 文件示例:
life id,policy id,benefit id,date of commencment,status
xx_0,0,0,11/11/2017,active
xx_0,0,0,12/12/2017,active
axb_0,1,0,10/01/2015,active
axb_0,1,0,11/10/2014,active
fxa_2,0,1,01/02/203,active
我想要做的是 groupby ( lifeid
+ policyid
+benefitid
)并按日期排序,然后对每个组的最近(最后一个)元素进行一些控制。
在火花上做到这一点的最佳方法是什么?
解决方案
在 spark 中执行此操作的最佳方法可能是使用数据帧(请参阅如何选择每个组的第一行?)。然而我读到你想避免使用它们。一个纯 RDD 解决方案可以写成如下:
val rdd = sc.parallelize(Seq("xx_0,0,0,11/11/2017,active",
"xx_0,0,0,12/12/2017,active",
"axb_0,1,0,10/01/2015,active",
"axb_0,1,0,11/10/2014,active",
"fxa_2,0,1,01/02/203,active"))
rdd
.map(_.split(","))
.map(x=> x.slice(0,3).reduce(_+","+_) ->
(new SimpleDateFormat("dd/MM/yyyy").parse(x(3)).getTime, x(4)))
.reduceByKey((a,b) => if(a._1 > b._1) a else b)
.map(x=> x._1+","+x._2._1+","+x._2._2)
.collect.foreach(println)
推荐阅读
- azure-synapse - 在 Azure Synapse 的 Spark 笔记本中运行上述所有单元
- php - 通过 Ajax/Post 推送数据
- bash - 有选择地防止命令出现在 Bash 历史文件中
- c# - 如何找到箭头的方向?
- r - 将多个 xlsx 文件合并到一个数据框中
- javascript - React 合成事件 onAnimationStart 似乎没有正确触发并且没有传递事件
- javascript - 如何创建一个节点的 MongoDB 副本集并使用 docker_compose.yml 对其进行初始化
- pushdown-automaton - 为以下语言构建一个 PDA
- amazon-web-services - AWS TreatMissingData 策略
- java - SPRING MVC:如何将单击的单选按钮值传递给控制器?