我是新手,我发现自己经常纠结于将一个元组转换为另一个元组,这可能非常复杂,如(r._1 - >(r._2._1,r._2 ._2) ),r._3),并与之混淆。反正有没有改善这个?
答案 0 :(得分:4)
不要使用元组,定义有意义的案例类。而不是
val rdd = sc.parallelize(Seq((1, "foo", (2, 2.0)), (2, "bar", (-1, 1.0))))
使用
case class Meta(someValue: Int, anotherValue: Double)
case class Record(x: Int, y: String, meta: Meta)
val records = sc.parallelize(Seq(
Record(1, "foo", Meta(2, 2.0)),
Record(2, "bar", Meta(-1, 1.0))))
records.map(record => (record.meta.anotherValue, record.x))
如果您使用元组首选模式匹配与有用的绑定而不是索引。
rdd.map {
case (x, _, (_, anotherValue)) => (anotherValue, x)
}
答案 1 :(得分:1)
我建议您使用DataFrame
s,您可以按名称访问列。这使您可以生成更好的可读代码。此外,您可以将这些框架存储为镶木地板文件,这些文件不仅非常具有存储效率,还包含架构信息。这些操作非常有效地实现,并且通常不需要切换回RDD
。