2016-05-10 63 views
0

工作,我有這樣的情況下,地圖將不會在火花外殼

val pop = sc.textFile("population.csv") 
.filter(line => !line.startsWith("Country")) 
.map(line => line.split(",")) 
.map { case Array(CountryName, CountryCode, Year, Value) => (CountryName, CountryCode, Year, Value) } 

的文件看起來像這樣的代碼。

Country Name,Country Code,Year,Value 
Arab World,ARB,1960,93485943 
Arab World,ARB,1961,96058179 
Arab World,ARB,1962,98728995 
Arab World,ARB,1963,101496308 
Arab World,ARB,1964,104359772 
Arab World,ARB,1965,107318159 
Arab World,ARB,1966,110379639 
Arab World,ARB,1967,113543760 
Arab World,ARB,1968,116787194 

直到.MAP {情況},我可以由pop.take(10), 打印出我也得到數組[數組[字符串]]。 但是一旦情況下添加的,我越來越

error: not found: value (all columns) 

所有列意味着與國家或地區名稱,COUNTRYCODE,年,價值等4個不同的錯誤... 不知道在哪裏我做錯了。 數據乾淨。

回答

1

您需要在模式匹配中使用小寫變量名稱。即:

.map { case Array(countryName, countryCode, year, value) => (countryName, countryCode, year, value) } 

在這被資本以及包圍在反引號變量Scala的模式匹配變量(`)從外部範圍取出並用作常量。這是說明我在說什麼的例子:

Array("a") match { 
    case Array(a) => a 
} 

將匹配陣列任何字符串,而:

val A = "a" 
Array("a") match { 
    case Array(A) => 
} 

將只匹配字面"a"。或者,等價物:

val a = "a" 
Array("a") match { 
    case Array(`a`) => 
} 

也只能匹配文字"a"