以可读的方式访问连接的 RDD 字段
Access joined RDD fields in a readable way
我加入了 2 个 RDD,现在当我尝试访问新的 RDD 字段时,我需要将它们视为元组。它导致代码不那么可读。我尝试使用 'type' 来创建一些别名,但是它不起作用,我仍然需要以元组的形式访问这些字段。知道如何使代码更具可读性吗?
例如 - 当尝试过滤连接的 RDD 中的行时:
val joinedRDD = RDD1.join(RDD2).filter(x=>x._2._2._5!='temp')
我想使用名称而不是 2,5 等
谢谢
明智地使用模式匹配。
val rdd1 = sc.parallelize(List(("John", (28, true)), ("Mary", (22, true)))
val rdd2 = sc.parallelize(List(("John", List(100, 200, -20))))
rdd1
.join(rdd2)
.map {
case (name, ((age, isProlonged), payments)) => (name, payments.sum)
}
.filter {
case (name, sum) => sum > 0
}
.collect()
res0: Array[(String, Int)] = Array((John,280))
另一种选择是在 RDD 上使用 dataframes 抽象并编写 sql 查询。
我加入了 2 个 RDD,现在当我尝试访问新的 RDD 字段时,我需要将它们视为元组。它导致代码不那么可读。我尝试使用 'type' 来创建一些别名,但是它不起作用,我仍然需要以元组的形式访问这些字段。知道如何使代码更具可读性吗?
例如 - 当尝试过滤连接的 RDD 中的行时: val joinedRDD = RDD1.join(RDD2).filter(x=>x._2._2._5!='temp')
我想使用名称而不是 2,5 等
谢谢
明智地使用模式匹配。
val rdd1 = sc.parallelize(List(("John", (28, true)), ("Mary", (22, true)))
val rdd2 = sc.parallelize(List(("John", List(100, 200, -20))))
rdd1
.join(rdd2)
.map {
case (name, ((age, isProlonged), payments)) => (name, payments.sum)
}
.filter {
case (name, sum) => sum > 0
}
.collect()
res0: Array[(String, Int)] = Array((John,280))
另一种选择是在 RDD 上使用 dataframes 抽象并编写 sql 查询。