2016-11-29 88 views
1

我是新来的火花,我发现自己经常纠结于将元组转换成另一个元组,这可能非常复杂,例如(r._1 - >(r._2._1,r._2._2), r._3),并对此感到困惑。无论如何要改善这一点?如何提高spark rdd的可读性?

回答

1

我会推荐使用DataFrame s您可以通过名称访问列。这使您可以生成更好的可读代码。此外,您可以将这些帧存储为实木复合地板文件,这些文件不仅非常有效,而且还包含架构信息。这些操作非常有效地实施,并且通常不需要切换回RDD

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) 
    }