在电脑面前发了一会呆,发现不知道写些啥了,思来想去,那么便写写在平时在数据处理过程常用的三门编程语言吧。这三门编程语言分别是 Python、Scala 和 Java。
相比于一般的后端开发工程师,往往局限在一门编程语言(除非是兴趣爱好,会去多学习其它的语言),在大数据领域内,由于没有一个组件能够完美的适应所有的业务场景,往往需要工程师掌握两三门编程语言,才能更好地解决问题。当然,编程语言看起来很多,但是当你掌握了一门语言后,从零开始学习一门新的编程语言到能解决问题,可能仅仅只需要一周的时间。
首先聊聊 Python。Python 作为现在所有编程语言里最流行的,其声名鹊起就是得益于在数据科学领域的广泛使用和强大的第三方包。有时候我也会在想,为什么 Python 就在大数据领域里面异军突起了呢?明明大数据的基础框架 Hadoop 是用 Java 写的,怎么大家都不用 Java 处理数据而是使用 Python 呢?后来得出一个结论,因为大部分人比较懒,比如从文件中读取数据这个简单的功能,Python 只需要两行代码就可以实现了,不考虑文件名长度的话,就不到十个单词而已而 Java 要实现从文件中读取数据那必须先写一个 Class ,再写一个 main 方法,然后再写读取数据的逻辑。
也许 Java 的拥护者会说,Python 处理数据慢啊。同样是在内存里跑一个一千万数据的 for 循环,Java 可能只需要一秒,Python则需要两三秒。但是我们忽略了在大数据领域内,因为数据本身是没有任何知识的,所以需要数据使用者做很多数据探索的工作,而在数据的探索过程中,大量的时间是花费在数据的输入输出上,包括从网络中读写数据、从磁盘中读写数据,这里的时间可能需要花费上十几秒了,在大多数时候远远超过了数据处理时间了,以至于数据处理时间可以忽略不计。既然都等了十几秒了,为啥不能再多等一两秒,更何况我写 Python 程序相比于写 Java 程序节约的时间不止这一两秒了。
我想这两点应该是为什么 Python 会在数据领域里受到欢迎的原因。
当然,在日常工作中,Python 也不仅仅是用来做数据处理,在我们团队里的任务调度系统 Airflow 和报表系统 Superset 都是用 Python 开发的,所以 Python 的功能还是很强大的。
说完了 Python,再聊聊 Scala。Scala 的流行是因为大数据处理框架 Apache Spark。Spark 是使用 Scala 开发的一门框架,虽然是使用 Scala 开发的,但是 Spark 支持使用 Scala、Python、Java、R 语言进行数据处理。自从 Spark 推出了 Dataframe 功能,如果仅从数据处理效率方面考虑,选择 Scala、Python、Java、R 语言这四门语言任意一个是不影响大局的。但是在一些细节处理,需要对底层数据进行一些细节的操作,大部分工程师还是会选择原生的 Scala,毕竟原生的少了中间层的互换。除此以外,Scala 由于其本身过于难学,导致应用场景一直就只有 Spark 这个领域,无法推广。
Java 和 Scala 很类似,因为很多大数据框架都是用 Java 开发的,比如分布式文件系统 HDFS 、分布式流计算引擎 Flink 等等,不胜枚举,这使得如果要对某一个框架进行深入学习就必须得了解 Java。但是实际应用场景却不是很多,因为大多数大数据框架都提供了 SQL 接口或者是 Python 接口,用到 Java 的地方少之又少。除非是要做底层平台的二次开发,否则 Java 就是一门屠龙技。
要说这三门编程语言的应用场景,以我现在所在的团队举例,现在的主力编程语言肯定是 Python,基本上所有的业务逻辑都是 Python 实现的,其中包括数据挖掘、数据分析,能用 Python 的地方就坚决使用 Python。再其次是 Scala,Scala 的应用场景相对较少,就只有开发流计算任务的时候才会用到它。最后是 Java,因为现在团队还停留在使用开源框架的基础上,重点是实现业务需求,导致用到 Java 的地方很少,想来想去,可能就是对异构数据传输框架 DataX 的二次开发用的上了(后续有机会的话,简单聊聊我们团队对 DataX 的二次开发和使用场景)。