최근 인턴쉽을 위해 Big Data와 관련된 새로운 프로젝트를 시작했습니다. 관리자들은 기능적 프로그래밍 학습을 시작하도록 권장했습니다 (Scala를 적극 권장합니다). F #을 사용한 경험이 적었지만, 프로그래밍의 패러다임을 사용하는 것이 중요하다는 것을 알 수 없었습니다.
딘은이 주제에 대한 흥미로운 이야기를주고, 여기에 왜 "빅 데이터"에 대한 자신의 생각을 공유 : http://www.youtube.com/watch?v=DFAdLCqDbLQ을 하지만 빅 데이터가 의미하는 것은 아니다으로 매우 편리하지 않았다 하둡 만
BigData는 매우 모호한 개념입니다. 한동안 잊어 버렸습니다. 우리가 데이터를 다룰 때 여러 가지 측면을 비교하고 기능적인 방법이 비싸지 않은지 알아보기 위해 간단한 예를 생각해 냈습니다. 함수형 프로그래밍이 작은 데이터에 비싸고 메모리 소비가 많은 경우 왜 빅 데이터에 필요한가?
멋진 도구와는 달리, 세 가지 접근 방식, 즉 명령 방식과 기능 방식 (재귀, 컬렉션 사용)을 사용하여 하나의 구체적이고 인기있는 문제에 대한 솔루션을 만들려고했습니다. 세 가지 방법을 비교하기 위해 시간과 복잡성을 비교했습니다.
스칼라를 사용하여 이러한 기능을 작성하는 것은 세 가지 패러다임을 사용하여 알고리즘을 작성하는 가장 좋은 도구이므로
def main(args: Array[String]) {
val start = System.currentTimeMillis()
// Fibonacci_P
val s = Fibonacci_P(400000000)
val end = System.currentTimeMillis()
println("Functional way: \n the Fibonacci sequence whose values do not exceed four million : %d \n Time : %d ".format(s, end - start))
val start2 = System.currentTimeMillis()
// Fibonacci_I
val s2 = Fibonacci_I(40000000 0)
val end2 = System.currentTimeMillis();
println("Imperative way: \n the Fibonacci sequence whose values do not exceed four million : %d \n Time : %d ".format(s2, end2 - start2))
}
기능적인 방법 :
def Fibonacci_P(max: BigInt): BigInt = {
//http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream
//lazy val Fibonaccis: Stream[Long] = 0 #:: 1 #:: Fibonaccis.zip(Fibonaccis.tail).map { case (a, b) => a + b }
lazy val fibs: Stream[BigInt] = BigInt(0)#::BigInt(1)#::fibs.zip(fibs.tail).map {
n = > n._1 + n._2
}
// println(fibs.takeWhile(p => p < max).toList)
fibs.takeWhile(p = > p < max).foldLeft(BigInt(0))(_ + _)
}
재귀 적 방법 :
def Fibonacci_R(n: Int): BigInt = n match {
case 1 | 2 = > 1
case _ = > Fibonacci_R(n - 1) + Fibonacci_R(n - 2)
}
명령 방식 :
def Fibonacci_I(max: BigInt): BigInt = {
var first_element: BigInt = 0
var second_element: BigInt = 1
var sum: BigInt = 0
while (second_element < max) {
sum += second_element
second_element = first_element + second_element
first_element = second_element - first_element
}
//Return
sum
}
함수형 프로그래밍이 무겁다는 것을 알았습니다! 시간이 오래 걸리고 메모리에서 더 많은 공간을 소비합니다. 기사를 읽거나 대화를 볼 때마다 데이터 과학에서 함수형 프로그래밍을 사용해야한다고 혼동됩니다. 사실, 특히 데이터 세계에서보다 쉽고 생산적입니다. 그러나 더 많은 시간과 메모리 공간이 필요합니다.
그렇다면 빅 데이터에서 함수형 프로그래밍을 사용해야하는 이유는 무엇입니까? 빅 데이터에 함수형 프로그래밍 (Scala)을 사용하는 모범 사례는 무엇입니까?