Spark记录-Scala异常处理与文件I/O

Posted 信方互联网硬汉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark记录-Scala异常处理与文件I/O相关的知识,希望对你有一定的参考价值。

Scala的异常处理类似许多其他语言(如Java)。它不是以正常方式返回值,方法可以通过抛出异常来终止。 但是,Scala实际上并没有检查异常。

当您想要处理异常时,要像Java一样使用try {...} catch {...}块,除了catch块使用匹配来识别和处理异常。

引发异常

抛出异常看起来与Java中的异常一样。创建一个异常对象,然后使用throw关键字将其抛出如下。

throw new IllegalArgumentException
Scala

捕获异常

Scala允许在单个块中try/catch任何异常,然后使用case块对其进行模式匹配。尝试以下示例程序来处理异常。

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Demo {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      } catch {
         case ex: FileNotFoundException =>{
            println("Missing file exception")
         }

         case ex: IOException => {
            println("IO Exception")
         }
      }
   }
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Missing file exception
Shell

try-catch表达式的行为与其他具有异常的语言相同。它在主体中执行,如果它抛出一个异常,则会依次尝试每个catch子句。

finally子句

如果希望引发一些代码执行,无论表达式如何终止,都会执行在finally子句包装表达式。尝试以下程序。

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException

object Demo {
   def main(args: Array[String]) {
      try {
         val f = new FileReader("input.txt")
      } catch {
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }

         case ex: IOException => {
            println("IO Exception")
         }
      } finally {
         println("Exiting finally...")
      }
   }
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Missing file exception
Exiting finally...

Scala文件I/O

 

Scala可以使用任何Java对象,而java.io.File是Scala编程中可用于读取和写入文件的对象之一。

以下是写入文件的示例程序。

import java.io._

object Demo {
   def main(args: Array[String]) {
      val writer = new PrintWriter(new File("test.txt" ))

      writer.write("Hello Scala")
      writer.close()
   }
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Hello Scala
Shell

从命令行读一行

有时需要从屏幕上读取用户输入,然后继续进行进一步的处理。 以下示例程序显示如何从命令行读取输入。

object Demo {
   def main(args: Array[String]) {
      print("Please enter your input : " )
      val line = Console.readLine

      println("Thanks, you just typed: " + line)
   }
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Please enter your input : Scala is great
Thanks, you just typed: Scala is great
Shell

阅读文件内容

从文件读取真的很简单。可以使用Scala的Source类及其对象来读取文件。以下是从前面创建的“Demo.txt”文件中读取的示例。

import scala.io.Source

object Demo {
   def main(args: Array[String]) {
      println("Following is the content read:" )

      Source.fromFile("Demo.txt" ).foreach { 
         print 
      }
   }
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Following is the content read:
Hello Scala
 

以上是关于Spark记录-Scala异常处理与文件I/O的主要内容,如果未能解决你的问题,请参考以下文章

通过python扩展spark mllib 算法包(e.g.基于spark使用孤立森林进行异常检测)

Spark记录-Scala模式匹配

Scala 与 Python 的 Spark 性能

spark实现item2Vec算法-附scala代码

spark实现item2Vec算法-附scala代码

spark实现item2Vec算法-附scala代码