2016-11-29 85 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) 
    }