我使用Spark 1.3。In Spark如何通過名稱本身而不是其索引來讀取字段
我的數據有50個以上的屬性,因此我去了一個自定義類。
如何通過它的名稱每次我需要調用一個方法時,訪問一個字段從一個自定義類不受其位置
這裏productElement(0)
而且我不應該使用情況類,因此我正在使用模式的自定義類。
class OnlineEvents(gsm_id:String,
attribution_id:String,
event_date:String,
event_timestamp:String,
event_type:String
) extends Product {
override def productElement(n: Int): Any = n match {
case 0 => impression_id
case 1 => attribution_id
case 2 => event_date
case 3 => event_timestamp
case 4 => event_type
case _ => throw new IndexOutOfBoundsException(n.toString)
}
override def productArity: Int = 5
override def canEqual(that: Any): Boolean = that.isInstanceOf[OnlineEvents]
}
我的星火代碼:
val onlineRDD = sc.textFile("/user/cloudera/input_files/online_events.txt")
val schemaRDD = onlineRDD.map(record => {
val arr: Array[String] = record.split(",")
new OnlineEvents(arr(0),arr(1),arr(2),arr(3),arr(4))
})
val keyvalueRDD = schemaRDD .map(online => ((online.productElement(0).toString,online.productElement(4).toString),online))
如果我嘗試訪問從OnlineEvents然後我需要使用productElement()的任何字段(即online.productElement(0),gsm_id)
。我可以直接訪問字段online.gsm_id ... online.event_type,以便我的代碼易於閱讀
我如何直接訪問字段的名稱時,我使用自定義類的s CHEMA?
不使用大小寫類的原因是什麼?在任何情況下,您都可以複製case類所做的事情,只需在構造函數中指定val,然後在您想要的名稱下使用。 –