代码改变世界

工作随笔-20171024

2017-10-25 10:10 by 轩脉刃, ... 阅读, ... 评论, 收藏, 编辑

appName(s"Crossroadfree") 这个是个什么语法?

这个是字符串插值用法,从scala2.10.0版本开始,在s""的里面可以使用$val来嵌入变量。

val name="James"
println(s"Hello,$name")//Hello,James

相类似的插值还有f 和raw

val height=1.9d
val name="James"
println(f"$name%s is $height%2.2f meters tall")//James is 1.90 meters tall f 插值器是类型安全的。如果试图向只支持 int 的格式化串传入一个double 值,编译器则会报错。例如:

scala>raw"a\nb"
res1:String=a\nb 当不想输入\n被转换为回车的时候,raw 插值器是非常实用的。

https://docs.scala-lang.org/zh-cn/overviews/core/string-interpolation.html

// 文章里面的高级算法没看明白。

=================

spark2.0的新特性

https://databricks.com/blog/2016/05/11/apache-spark-2-0-technical-preview-easier-faster-and-smarter.html

https://www.iteblog.com/archives/1668.html

=============================

scala中object和class的区别?

class:
1 所有类的变量默认是public的,可以设置private,protected, public
2 scala的方法默认都是public的, 可以设置为private,protected,public甚至更多https://alvinalexander.com/scala/how-to-control-scala-method-scope-object-private-package

object就相当于static的class,object中定于的方法,属性都可以被静态调用。

===============================

看到同事有一个match语法,是个什么意思?

    val date = CommonUtil.parseDate(args(3)) match {
      case Some(_: LocalDate) => args(3)
      case None => {
        System.err.println("Date param should be yyyyMMdd pattern")
        System.exit(1)
      }
    }

这个match就相当于是switch case,是scala里面的关键词

这个逻辑就是判断parseDate解析出来的是不是符合日期的格式。如果是的话,就把args(3) 赋值给date,否则的话,就退出。

=================================

同事的代码中看到这么一行

println(functions.input_file_name)

好像是说获取当前这个spark的rdd的列的名字?

运行的时候发现这个并没有啥用。

=================================

同事的代码看到这么一行:

sqlContext.sql("""
    SELECT user_no,oper_code
    FROM cui.operation_data_android
    WHERE user_no <> 'null' AND oper_time>='20160101000000' AND oper_time<'20160114000000'
""").take(1)

三个引号是代表多行字符串。当我们的字符串有多行的时候,就使用这个多行字符串进行获取。

它也是支持字符串插值的。

val count = "2"

val weightGroupSql =
  s"""
    |SELECT    first(cityId) as cityId,
    |          startLink,
    |          endLink,
    |          count(1)/${count} as count
    |FROM
    |   test
    |   group by startLink, endLink
    |
      """.stripMargin

============================

看同事的代码有下面一行:

val junctionDriverBasicData = junctionDriverBasicDataLines
        .map(item => Tuple1(DataParseUtil.parseJunctionDriverBasicData(item)))
        .filter(!_._1.isEmpty)
        .map(_._1.get)

询问他为什么这里有个Tuple1,理由是DataParseUtil.parseJunctionDriverBasicData 这个函数有可能返回null。

=================================

scala中的集合?

scala中集合分为可变集合和不可变集合