大數據入門:Scala函數式編程

2020-12-13 成都加米谷大數據

在大數據的學習當中,學到Spark部分,就免不了需要Scala這門語言了,Scala是Spark框架的原生程式語言,想要真正把Spark搞懂,那麼對Scala自然也需要相應程度的掌握。今天的大數據入門分享,我們就來講講Scala函數式編程。提到Scala,首先會提到的一個概念,就是函數式編程,這也是Scala語言區別與其他程式語言的典型特徵。Scala是一門多範式(multi-paradigm)的程式語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。

在大數據處理場景下,Scala語言有著相當的優勢——在實際運行中,Scala原始碼被編譯為Java字節碼,所以可以運行在JVM上,可以調用現有的Java類庫,併兼容現有的Java程序。命令式編程VS函數式編程命令式編程,程序邏輯的基本元素是:變量+操作符+控制結構,這些元素構成一條條的代碼指令,因此,稱之為命令式編程。函數式編程,程序邏輯由:map+匿名函數組成。整個代碼中,看不到變量、控制結構、操作符等元素,看到的只有函數,因此,函數式編程的本質就是:程序邏輯的基本元素是函數。

理解函數式編程命令式編程中,程序邏輯的基本元素是:變量+操作符+控制結構;函數式編程中,程序邏輯的基本元素是:函數;面向對象編程中,程序邏輯的基本元素是:對象+操作符+控制結構;大部分的程序邏輯,命令式編程和函數式編程都可以實現;命令式編程的思路更加偏向於計算機本身,而函數式編程的思路更偏向於人的思維;Scala提供了大量的特性,例如:val常量,匿名函數、高階函數、閉包、柯裡化等,來支持函數編程;函數式編程有利於程序自動並行化,只需對numList做一個簡單的數據劃分,將numList劃分成n個部分,每個部分都執行map()操作,最後匯總結果即可,這個工作是一個固定的模式,可以由機器來完成;編程時,要注意培養自己使用函數式編程的習慣,嘗試將邏輯抽象成函數,將函數作為程序邏輯的組成元素,同時,還可以多閱讀別人的代碼,如Spark的實現,吸取其中有益的經驗,久而久之,就可以寫出很專業的的函數式編程代碼。

編程方式的選擇Scala支持命令式編程、函數式編程、面向對象編程。那麼在實際編程中該如何選擇呢?在實踐中,編程方式的選擇,要以功能實現為第一要義。例如,面向對象支持多態、繼承,這些特性對於代碼復用、簡化邏輯有很大幫助,因此,有類似需求的時候,可以考慮面向對象編程;又比如,函數式編程對程序並行化非常友好,因此,有類似需求的時候,可以考慮函數式編程等等,此外,如類似數學推理的需求,用函數式編程也是比較合適的。切記:不可因為偏愛某種編程方式,而生搬硬套,為了編程而編程,忘記出發點,是不可取的。關於大數據入門,Scala函數式編程,以上就為大家做了簡單的介紹了。Spark框架在大數據技術生態當中,佔據著相當重要的地位,而涉及到Spark學習,也必然離不開Scala函數式編程的學習與掌握。

相關焦點

  • Scala語言概述
    1、Scala語言概述2、Scala基礎知識3、Scala數據結構4、Scala面向對象5、Scala函數式編程1. scala語言概述1.1、學習任務1、了解Scala語言特點2、學會配置Scala環境3、配置IDE並用Scala寫第一個程序1.1、發展歷史Scala是Scalable
  • 函數式編程二 異常處理
    基礎函數式編程一在java中用函數式的方式去做事情,Happy Path確實很好玩,但是編程中最不好玩的就是異常的情況。
  • 小六六學大數據之 Spark(Scala)
    Funnel是把函數式編程思想和Petri網相結合的一種程式語言。Odersky先前的工作是Generic Java和javac(Sun Java編譯器)。Java平臺的Scala於2003年底/2004年初發布。.NET平臺的Scala發布於2004年6月。該語言第二個版本,v2.0,發布於2006年3月。截至2009年9月,最新版本是版本2.7.6 。
  • Scala簡明教程
    本教程預計花費30min語言說明scala是基於java開發的,結合了面向對象編程技術及函數式編程技術。scala的靜態類型避免了複雜程序的大部分BUG。它的JVM和Js運行環境讓你可以構建高性能系統。開始0.
  • 大數據分析工程師面試集錦2-Scala
    最簡單和重要的理由是開發需要,大數據分析工程師是需要掌握大數據相關組件的,而很多大數據組件是由Scala開發的-如Spark和Kafka,所以相關的開發,Scala就成為了首選開發語言。,它把近二十年間大行其道的面向對象編程與舊而有之的函數式編程有機結合起來,形成其獨特的魔力,可以使你的代碼更簡潔高效易於理解。
  • Scala講座:混入多重繼承、類型層次和集合
    用特徵來方便地實現面向方面的編程 充分利用特徵的功能之後,就能方便地實現現今流行的面向方面編程(AOP)了。首先,用特徵來聲明表示基本動作方法的模塊Taction。Scala的類型體系(基本類型)Scala中可使用的基本數據都以類的形式被定義了,所以基本類型與用戶定義類型可以認為是沒有區別的。雖然這麼說,Scala還是提供了與Java的數據類型相對應的類定義群(圖 4-1)。
  • java8的函數式編程解析
    其實在java8就已經有java的函數式編程寫法,只是難度較大,大家都習慣了對象式用法,但在其它語言中都有函數式的用法,如js,scala,函數式其實是抽象到極致的思想。什麼是函數式編程 函數式編程並不是Java新提出的概念,其與指令編程相比,強調函數的計算比指令的計算更重要;與過程化編程相比,其中函數的計算可以隨時調用。
  • 函數式編程
    ,我們會看到如下函數式編程的長相:函數式編程的三大特性:immutable data 不可變數據:像Clojure一樣,默認上變量是不可變的,如果你要改變變量,你需要把變量copy出去修改。函數式編程的幾個技術map & reduce :這個技術不用多說了,函數式編程最常見的技術就是對一個集合做Map和Reduce操作。這比起過程式的語言來說,在代碼上要更容易閱讀。
  • 高階函數與函數式編程
    根據程式語言理論,一等對象必須滿足以下條件:Python 函數同時滿足這幾個條件,因而也被稱為 一等函數 。高階函數 則是指那些以函數為參數,或者將函數作為結果返回的函數。對高階函數稍加利用,便能玩出很多花樣來。本節從一些典型的案例入手,講解 Python 函數高級用法。
  • 寫Python 代碼不可不知的函數式編程技術
    選自 Medium作者:Raivat Shah參與:魔王、Jamin本文對 Python 中的函數式編程技術進行了簡單的入門介紹。近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。本文對 Python 中的函數式編程技術進行了簡單的入門介紹。本文適合對函數式編程有基本了解的讀者。
  • Python中的函數式編程
    (維基百科:函數式編程)所謂編程範式(Programming paradigm)是指編程風格、方法或模式,比如面向過程編程(C語言)、面向對象編程(C++)、面向函數式編程(Haskell),並不是說某種程式語言一定屬於某種範式,例如 Python 就是多範式程式語言。
  • 程式語言 Scala 2.12.0 正式版發布 - OSCHINA - 中文開源技術交流...
    程式語言 Scala 2.12.0 正式版發布了。
  • 函數式編程,真香
    最近在研究函數式編程,真的是在學習的過程中感覺自己的思維提升了很多,抽象能力大大的提高了,讓我深深的感受到了函數式編程的魅力。所以我打算後面用 5 到 8 篇的篇幅,詳細的介紹一下函數式編程的思想,基礎、如何設計、測試等。今天這篇文章主要介紹函數式編程的思想。函數式編程有用嗎?什麼是函數式編程?函數式編程的優點。
  • 寫 Python 代碼不可不知的函數式編程技術
    作者:Raivat Shah參與:魔王、Jamin本文對 Python 中的函數式編程技術進行了簡單的入門介紹。近來,越來越多人使用函數式編程(functional programming)。因此,很多傳統的命令式語言(如 Java 和 Python)開始支持函數式編程技術。
  • 函數式編程,我心中的 C 位!
    最常見的三種範式分別是面向對象程序設計、命令式程序設計和函數式程序設計。這三種思想體系並無優劣之分,通常我們都需要選擇正確的工具來完成工作。大多數軟體工程師對於函數式編程的概念並不太熟悉。實際上,歷史上的第二個程式語言Lisp就屬於函數式範式。
  • Scala學習手冊(Learning Scala)第四章習題
    scala> def area(r:Double):Double = r*r*3.14area: (r: Double)Doublescala> area(5)res30: Double = 78.5也可以使用math.pow(r,
  • 深入理解Scala的有趣途徑
    本書適合於對Scala感興趣的開發者、對JVM平臺上的語言以及函數式編程感興趣的程式設計師閱讀。本書主要內容讓代碼做我們希望它做的事,是作為一個開發者的基本目的。所以沒有什麼比我們自認為理解的一段代碼表現出與我們期望相反的行為更迷人、更重要的了。本書匯集了一些Scala的例子。
  • 白話 Python 的函數式編程
    今天和大家聊聊 Python 的函數式編程特性。
  • 函數式編程聖經
    上帝看到約翰·麥卡錫發明了表處理語言 Lisp,卻只用來學術研究,很是傷心,就把 Lisp 解釋器的秘密告訴了他的學生史蒂芬·羅素,史蒂芬·羅素將eval函數在IBM 704機器上實現後,函數式編程的大門第一次向人類打開了。
  • Java如何支持函數式編程?
    函數式編程因其編程的特殊性,僅在科學計算、數據處理、統計分析等領域,才能更好地發揮它的優勢,所以它並不能完全替代更加通用的面向對象編程範式。但是作為一種補充,它也有很大存在、發展和學習的意義。函數式編程的英文翻譯是Functional Programming。那到底什麼是函數式編程呢?實際上,函數式編程沒有一個嚴格的官方定義。