案例图在spark shell中不起作用

时间:2016-05-10 23:39:13

标签: scala apache-spark mapreduce

我有这样的代码

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

文件看起来像这样。

error: not found: value (all columns)

直到.map {case},我可以通过pop.take(10)打印出来, 我得到了Array [Array [String]]。 但是一旦案件被添加,我就会

protected override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;

// Redirect on error:
filterContext.Result = RedirectToAction("Index", "Error");

// OR set the result without redirection:
filterContext.Result = new ViewResult
{
    ViewName = "~/Views/Error/Index.cshtml"
};
}

所有列含有CountryName,CountryCode,Year,Value等的4个不同错误... 不确定我在哪里做错了。 数据很干净。

1 个答案:

答案 0 :(得分: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"