2016-06-16 1 views
0

안녕하세요 저는 스칼라에 대해 더 많이 이해하려고 노력하고 있습니다.이 메서드 시그니처가 약간 분실되었다고 생각합니다. 은 "<이 :"무엇Spark Scala 메서드 DataFrame API의 서명

explode[A <: Product](input: Column*)(f: (Row) ⇒ TraversableOnce[A])(implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[A]): DataFrame 

첫째, 광장 brakcets에서 가정을 의미 하는가? A와 B는 매개 변수 유형으로 간주됩니까? 그러나 Column은 인수 유형입니다.

두 번째로, (행)에서 Traversable [A]까지 람다 함수를 실행 한 것처럼 보입니다.하지만 람다는 아직 보지 못했지만 오른쪽 인수에 적어도 한 번은 왼쪽 인수가 없습니다.

또한, 나는 '는 암시는 arg0을 가지고 왜 100 % usre하지 M : 조각

사전에 감사!

답변

1

"< :"은 대괄호 안에 무엇을 의미합니까?

<: 그래서 여기가 AProduct의 부속 수단, 스칼라의 아류를 의미한다. 이 매개 변수 유형 있어야 Product

있습니다 A와 B의 하위 유형으로 여기 전달 될 수있는 유형을 제한 상한의 종류와 같은 역할을? 그러나 열이 인수 유형

A는 형식 매개 변수라고 그 자체로 매개 변수이며, 매개 변수 유형되지이다. 조금 혼란 스럽지만 기본적으로 product의 하위 유형 인 모든 유형을이 위치에 전달하고 함수 내에서 type 매개 변수를 사용할 수 있음을 의미합니다. 이것은 동시에 다른 유형을 처리 할 수 ​​있고 다른 유형에 대해 별도의 함수를 작성할 필요가 없기 때문에 함수를보다 일반적으로 만듭니다. 이 [A]

f: (row) => Traversable[A]

이 경우 (row)를 받아 Traversable[A]를 반환하는 함수의 형태 인 다른 파라미터에 이동하는 (행)에서 람다 기능하는 것처럼

가 보인다. 이 정의에 따라 explode은 함수를 매개 변수로 허용 할 수 있습니다.이 경우 매개 변수는 람다 식입니다. 결론적

def sum(x: Int, y: Int)(f: Int => Int) = f(x) + f(y) 
sum: (x: Int, y: Int)(f: Int => Int)Int 

sum(2,3)(x => 2*x) 
res2: Int = 10 

함수는 총 세 개의 매개 변수, 제 A 하나가 입력 파라미터 받아 분해 :

지난 경우를 도시한다. 두 번째와 세 번째는 함수의 실제 인수이며, Input은 알아두면 Column이고, (row) => Traversable[A]은 함수 유형 인 f입니다.

+0

"일반"유형의 매개 변수와 함수 유형의 매개 변수를 정의 할 때 함수가 항상 다른 괄호 집합에 있어야합니까? Int, b : Int, f : (Int) => Int)와 같이 보이거나 (Int :))? 감사합니다. 혼란스러운 "B"하하에 대해 미안합니다 –

+1

REPL로 테스트 할 수있는 것은 아닙니다.''(a : Int, b : Int, f : Int => Int)'와'(a : Int, b : Int) (f : Int => Int)'모두 작동하지만, 당신이 그들을 정의하는 방법. 후자의 경우 두 단계로 매개 변수를 전달할 수 있으므로 때때로 이점이 있습니다. – Psidom