2つのRDDに参加しましたが、新しいRDDフィールドにアクセスしようとすると、それらをタプルとして扱う必要があります。それはそれほど読みにくいコードにつながります。いくつかのエイリアスを作成するために 'type'を使用しようとしましたが、機能せず、タプルとしてフィールドにアクセスする必要があります。コードを読みやすくする方法はありますか?
たとえば、結合されたRDDの行をフィルターにかけようとすると、
valjoinedRDD = 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))
別のオプションは、RDAで
dataframes抽象化を使用し、SQLクエリを作成することです。