scala> val rawData = sc.textFile("...")
rawData: org.apache.spark.rdd.RDD[String]
val line = rawData.first
line: String
0. Double 类型的格式化
- 保留小数点后两位:
value.formatted("%.2f")
,此时由 double 转换为 String 类型;
1. String 常用成员及成员函数
-
*
操作的签名为:def *(n: Int): String Return the current string concatenated n times.
- 简单举例:
scala> "crazy"*3 String = crazycrazycrazy
-
length:字符串的长度;
-
split()
和 Java/Python 中的 String 类一样,得到一个 String 构成的数组,接受的参数为字符,
scala> val pieces = line.split(',') pieces: Array[String]
-
patch(from: Int, that: GenSeq[A], replaced: Int):在指定位置替换指定数量字符的操作
- 首先来看其函数签名,
def patch(from: Int, that: GenSeq[A], replaced: Int): String[A]
- 简单举例:
scala> "harry".patch(1, "ung", 2) String = hungry scala> "harry".patch(1, "ung", 4) String = hung
2. tuple
Scala 中的元组同 Python,由()
标识:
val t = (1, 2, 3)
-
基本用法
从元组中获取某个字段的值,可以用下标函数,注意是从 _1 开始,或者用 productElement 方法(它是从 0 开始计数的)
t._1 # 1 t.productElement(0) # 1
使用 productArity 方法获得元组的大小:
t.productArity # 3
-
元组与 case class
Scala 创建元组非常简单方便,但通过下标而不是有意义的名称来访问元素会让代码很难理解。我们更希望创建一个简单的记录类型,它可以根据名称而不是下标访问字段。幸运的是,Scala 恰提供这样的语法,可以方便地创建这种记录,这就是 case class。
case class Student (name: String, age: Int, weight: Double) val s1 = Student("zhang", 23, 65.) # 我们便可以使用名称来访问字段,颇有几分 map 的感觉
3. Range
-
until vs to
- until:不包括右端点
- to:包括右端点
scala> 0 until 5 res0: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4) scala> 0 to 5 res1: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4, 5)
-
by:设置步长
也即默认步长为1
scala> 5 to 40 by 5 res2: scala.collection.immutable.Range.Inclusive = Range(5, 10, 15, 20, 25, 30, 35, 40) scala> 5 until 40 by 5 res3: scala.collection.immutable.Range = Range(5, 10, 15, 20, 25, 30, 35)