2015-10-11 68 views
0

我不知道如果標題準確地描述了我的問題,但這裏是我的問題:如何在Scala Spark中動態選擇某個字段?

dump的類型爲:

dump: org.apache.spark.rdd.RDD[(String, String, String, String)] 

例如:

val dump = sc.parallelize(List(("a","b","c","s"))) 

,我有以下for-loop:

for (i <- List(0,1,2,3)) { 
     val temp = dump.map(x=> x._i) 
    } 

Bu t IntelliJ表示在x._i中有錯誤。有任何想法嗎?

+0

什麼類型是'dump'?你想用'_i'做什麼?請編輯你的問題,並提供一個最小完整的可驗證示例,因爲幾乎不可能解決你現在的問題http://stackoverflow.com/help/mcve –

+0

謝謝!更新。 – user706838

+1

如果你有一個相同類型的四個元素的索引序列,你真的想要使用一個List或Vector。元組用於聚合許多可能不相似的東西。 –

回答

4

IntelliJ正確指出您使用的語法不正確。

你正在嘗試做的,可以使用類似方式實現:

for (i <- List(0, 1, 2, 3)) { 
    val temp = dump.map(x => x.productElement(i)) 
} 

Tuples是一類的實際情況,他們是不完全,您可以訪問使用索引的數組。另外,與JavaScript等其他語言不同,scala不允許基於字符串的屬性訪問(除非您想使用反射)。你所嘗試的可以用一些像JS這樣的語言進行語法上的改變,但不能用在Scala中。

但是,至少在這種情況下,同樣的事情可以使用productElement方法調用實現爲每一個所有元組也都是Product情況下,這確實有遍歷元素,或通過索引訪問這些設施。請注意,0的索引等於._1,依此類推。

此外,參考@Archeg的評論,您可以將其放入元組中。有從Tuple1Tuple22的元組類。這意味着元組最多可以包含22個元素。

+2

另外它可能值得一提的是,斯卡拉限制了你可以放入'Tuple'的元素數量,我認爲它是22,我不確定。元組不被設計爲以這種方式使用 – Archeg

相關問題